【发布时间】:2018-07-11 15:27:22
【问题描述】:
我有三个文件,
A.txt
DRR033612 184474
DRR033613 232882
DRR033614 66017
DRR033615 189965
DRR033616 118663
DRR029180 8439
B.txt
DRR033615 1
DRR033616 3
C.txt
DRR033615 5
DRR029180 10
DRR033612 20
我想用下面的 awk 命令总结一下:
cat *.txt | awk 'BEGIN{FS=OFS="\t"}{unique[$1]=(unique[$1] FS $2); next}END{for (i in unique) print i,unique[i]}'
我基本上是根据第一列加入文件。 A.txt 包含所有项目。
不幸的是,该命令没有按我想要的方式工作,即DRR033612 20 行的值20 没有写入正确的字段中。
这是我的输出:
DRR033614 66017
DRR029180 8439 10
DRR033615 189965 1 5
DRR033616 118663 3
DRR033612 184474 20
DRR033613 232882
这是我想要的输出:
DRR033614 66017
DRR029180 8439 10
DRR033615 189965 1 5
DRR033616 118663 3
DRR033612 184474 20
DRR033613 232882
另外,我希望所有空单元格都替换为0。
【问题讨论】:
-
您已经很好地解释了它,但我认为如果您在给定示例输入的情况下包含您想要的输出,它会更有帮助。这会给人们一些明确的东西来测试他们的解决方案。
-
脚本需要注意文件名何时更改,然后将默认字段添加到该通道中尚未更新的任何唯一元素。
-
如果
B.txt或C.txt中的条目在A.txt中不存在,您能否扩展您的输出?假设B.txt包含条目DRR033620 100 -
A.txt包含所有项目 -
你应该在你的问题中提到这一点
标签: bash awk multiple-columns