如何对目录文件进行分类,将文件名附加到文本行并删除标题行?这样 all.txt 文件中只有 1 个标题行。
答案1
我有 225 个文本文件,每个文件有 2 行文本、标题行和数字数据。每组文本所来自的文件名是我想要在包含数据的行的第一列中添加的文件名。我还想删除/(不是复制)除第一个之外的所有标题行。因此在最顶部只给了我一个标题行。
如果我理解正确的话,你想要以下内容:
for file in *.txt; do echo "$file" $(tail -n1 $file) >> output.txt; done
然后编辑 output.txt 以创建您喜欢的标题。
答案2
$ cat a.txt
HEADER
a
b
c
$ cat b.txt
HEADER
1
2
3
$ awk 'NR==1 {print; next} FNR==1 {next} {print FILENAME, $0}' *.txt > all.txt
$ cat all.txt
HEADER
a.txt a
a.txt b
a.txt c
b.txt 1
b.txt 2
b.txt 3
答案3
使用 awk,使用NR
和FNR
变量跳过除第一个文件的标题行之外的所有行。您可以通过访问内置FILENAME
变量将当前文件名添加到其余行的前面。例如,如果每个文件中有两个标题行,则
awk 'NR<3; FNR>2 {print FILENAME,$0}' *.txt > all.txt