我如何同时在终端中操作这些文件

我如何同时在终端中操作这些文件

我有 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

使用awkFILENAME变量。
要去掉扩展名,您可以使用以下gsub函数:

awk -F'\t' 'BEGIN{OFS=FS}{gsub(/.txt$/,"",FILENAME); print FILENAME,$0}' *.txt

添加> MERGE.txt到末尾以将结果放入新的文本文件中。

相关内容