我试图将数千个文件连接到一个文件中,这些文件位于不同的子文件夹中,并且还将每个连接文件的名称插入为第一列,以便我知道每个数据行来自哪个文件。基本上是这样开始的:
编辑:我忘了提到每个文件都有相同的头,所以我相应地更新了请求。
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