将不同子文件夹中的文件连接到一个文件中,并将每个文件名放在第一列中



我试图将数千个文件连接到一个文件中,这些文件位于不同的子文件夹中,并且还将每个连接文件的名称插入为第一列,以便我知道每个数据行来自哪个文件。基本上是这样开始的:

编辑:我忘了提到每个文件都有相同的头,所以我相应地更新了请求。

Folder1
file1.txt
A   B   C
123 010 ...
456 020 ...
789 030 ...
Folder2
file2.txt 
A   B   C
abc 100 ...
efg 200 ...
hij 300 ...

并输出:

CombinedFile.txt
A      B    C
file1  123  010 ...
file1  456  020 ...
file1  789  030 ...
file2  abc  100 ...
file2  efg  200 ...
file2  hij  300 ...

看完这篇文章后,我尝试了下面的代码,但最终出现了语法错误(抱歉,我是awk的新手!)

shopt -s globstar
for filename in path/**/*.txt; do
awk '{print FILENAME "t" $0}' *.txt > CombinedFile.txt
done

谢谢你的帮助!

这个单一的awk应该能够在没有任何循环的情况下做到这一点:

shopt -s globstar
awk 'FNR == 1 {
f = FILENAME
gsub(/^.*/|.[^.]+$/, "", f)
if (NR > 1) # show header for first file only
next
}
{
print f, $0
}' path/**/*.txt > CombinedFile.txt
cat CombinedFile.txt
file1 123 010
file1 456 020
file1 789 030
file2 abc 100
file2 efg 200
file2 hij 300

最新更新