我有 139 个不同的制表符分隔.txt
文件。我想向每个文件添加一列,其中包含该.txt
文件的名称,最后将所有 .txt 文件附加到一个文件中;假设我有A.txt
, B.txt
,C.txt
文件,并且在每个文件中我都有这样的列
chrM 10458 C T
chrM 13960 C T
chrM 14173 T C
chr1 920552 G A
我需要类似的东西
A chrM 10458 C T
A chrM 13960 C T
A chrM 14173 T C
A chr1 920552 G A
B chr1 1350208 G A
B chr1 1447367 T G
B chr1 1909310 G A
B chr1 2172675 G C
C chr1 2846623 C T
C chr1 3057894 G A
C chr1 3096688 G C
C chr1 3154525 G A
你能帮我做那件事吗?
谢谢
答案1
这有点技巧,但是您可以在所有带有grep
.这将在每行的开头添加文件名,让您知道匹配发生的位置。您可以用sed
空格替换部分前缀文件名(“.txt:”):
grep . *.txt | sed 's/.txt:/ /g'
它浪费了相当多的 cpu 周期,但对于一次性定时器来说,没关系,它会完成工作。
答案2
使用awk
和FILENAME
变量。
要去掉扩展名,您可以使用以下gsub
函数:
awk -F'\t' 'BEGIN{OFS=FS}{gsub(/.txt$/,"",FILENAME); print FILENAME,$0}' *.txt
添加> MERGE.txt
到末尾以将结果放入新的文本文件中。