【问题标题】:Combine two columns from different files into one table side-by-side using bash script使用 bash 脚本将来自不同文件的两列并排合并到一个表中
【发布时间】:2016-02-08 18:23:55
【问题描述】:

我有两个文件,我试图从中提取每个文件的第三列并将它们组合在一起。如何将它们并排组合到一个表中?

file1="maize.txt"
file2="wheat.txt"

awk -F '{print $3}' file1
awk -F '{print $3}' file2

"wheat.txt"
chr -   b73_chr10   B73-Chr10   0   150189435       
chr -   w22_chr7    W22-Chr7    0   176764762       
chr -   w22_chr8    W22-Chr8    0   175793759       

"maize.txt"
chr -   w22_chr9    W22-Chr9    0   156750706       
chr -   w22_chr10   W22-Chr10   0   150189435       
chr -   w22_chr6    W22-Chr6    0   169174353   

Output : 

b73_chr10   w22_chr9
w22_chr7    w22_chr10
w22_chr8    w22_chr6

【问题讨论】:

  • 你想看什么输出?

标签: bash awk


【解决方案1】:

使用 awk 你可以做到:

awk -v OFS='\t' 'FNR==NR{a[FNR]=$3; next} {print a[FNR], $3}' wheat.txt maize.txt
b73_chr10   w22_chr9
w22_chr7    w22_chr10
w22_chr8    w22_chr6

【讨论】:

  • 嗨,我对另外两个文件尝试了相同的代码,但现在它只是保存第一行而不是下一行。
  • 文件数据结构一定有区别,否则就是很简单的awk命令
  • 好吧..当然。我会检查一下。
  • 20-30多个文件怎么用
  • 可以轻松搞定。您对此有疑问吗?
【解决方案2】:

您正在寻找的工具是paste。您可以编写一个函数来提取上面定义的第三个字段。

$ f3() { awk '{print $3}' "$1"; }; paste <(f3 wheat.txt) <(f3 maize.txt)

b73_chr10       w22_chr9
w22_chr7        w22_chr10
w22_chr8        w22_chr6

【讨论】:

  • 我喜欢你使用函数的方式。不过你应该引用"$1"
猜你喜欢
  • 2018-01-04
  • 2013-11-13
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 2013-09-06
相关资源
最近更新 更多