awk - 将每个文件中的相同列提取到一个文件

标签 awk paste cut

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

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

期望的输出是

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

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

我将第一个文件移动到其他文件夹中以从提取中排除。以下命令没有给出结果。

cut -d " " -f3 *.txt | paste ../breedname.txt - > output.txt

我还尝试使用这些问题中显示的 awk 命令,但它不适用于我的数据集。

欢迎任何帮助!

最佳答案

这是一种非常快速但肮脏的方法:

假设您的文件顺序相同:

$ 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

如果你想让标题更清晰一点:

$ 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

假设您的文件顺序不同:

$ 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

关于awk - 将每个文件中的相同列提取到一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63524301/

相关文章:

bash - 在 awk 中在文件中搜索时使用变量作为搜索模式时面临的问题

linux - 获得大于 X 的 awk 结果

bash - 从 grep 打印行号,用逗号分隔

linux - 在 Bash/Awk/Perl 中有效地按列计算 token

javascript - 在文本区域捕获粘贴的输入

shell - 合并多个不同长度的文本文件

轻松记忆起许多不同名称的变量

r - 将数据分为大小相等的组

bash - Unix bash 切割和 grep

awk - awk 中的并行处理?