首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从每个文件中提取同一列为一个文件

从每个文件中提取同一列为一个文件
EN

Stack Overflow用户
提问于 2020-08-21 14:01:21
回答 2查看 92关注 0票数 2

我有以下171个文件的数据集。

代码语言:javascript
运行
复制
CHR:POS   REF:ALT   BREED

6:85406127 T:A 0.333333
6:85406128 T:C 0
6:85406129 C:G 0.333333
6:85406130 T:G 0.833333

期望输出是

代码语言:javascript
运行
复制
CHR:POS   REF:ALT   BREED BREED2 BREED3 ... 171st file

6:85406127 T:A 0.333333 0.33 0.5 .... 0.4
6:85406128 T:C NA 0.33 0.5 .... 0.4
6:85406129 C:G 0.333333 0.33 NA .... 0
6:85406130 T:G 0.833333 0.33 0.5 .... NA

文件名包含品种名称。第一列和第二列在每个文件中包含相同的信息。如何只从每个文件中提取第三列,同时保留第一个文件中的所有列?

我将第一个文件移到其他文件夹中,以便从解压缩中排除。以下命令没有给出结果。

代码语言:javascript
运行
复制
cut -d " " -f3 *.txt | paste ../breedname.txt - > output.txt

我也尝试使用这些问题中显示的awk命令,但它对我的数据集不起作用。

欢迎任何帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-21 14:13:54

下面是一种非常快速和肮脏的方法:

假设您的文件顺序相同:

代码语言:javascript
运行
复制
$ awk '(FNR==NR){a[FNR]=$0;next}
       {a[FNR]=a[FNR] FS $NF}
       END{for(i=1;i<=FNR;++i) print a[i]}' file1 file2 file3 ... filen

如果您想要标题更干净一点:

代码语言:javascript
运行
复制
$ awk '(FNR==NR){a[FNR]=$0 (FNR==1?++c:"");next}
       {a[FNR]=a[FNR] FS $NF (FNR==1?++c:"")}
       END{for(i=1;i<=FNR;++i) print a[i]}' file1 file2 file3 ... filen

假设您的文件顺序不同:

代码语言:javascript
运行
复制
$ awk '{key=$1 FS $2}
       (FNR==NR){a[key]=$0 (FNR==1?++c:"");next}
       {a[key]=a[key] FS $NF (FNR==1?++c:"")}
       END{for(i in a) print a[i]}' file1 file2 file3 ... filen
票数 1
EN

Stack Overflow用户

发布于 2020-08-21 14:40:37

我会这样做:

代码语言:javascript
运行
复制
paste -d " " *.txt | awk '{printf "%s %s ",$1,$2; for (i = 3; i <= NF; i+=3){printf "%s ",$i} print ""}'

paste垂直地将这些行连接起来,所以每一列都在彼此旁边。之后,您只需选择所需的列即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63524301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档