我目前正在使用此脚本执行此操作:
head -1 file001.txt > all.txt; tail -n +2 -q *.txt >> all.txt
它没有问题,从第一个文件中获取标题然后连接其他文件。
其他行都在一行中,而不是每行都在单独的行中。请帮助纠正这个问题。
如果你有任何其他的衬垫可以完成这项工作,那么很受欢迎。
获取带有该扩展名的任何文件的标题,我不想提供任何特定文件名,例如 file001.txt ,我更喜欢它从任何文件中取出它,因为无论如何它们都有相同的标题。但我的文件名可能不是 file001.txt 模式,这就是我说任何带有该扩展名的文件的原因。
答案 0 :(得分:2)
使用awk
:
awk 'FNR==1&&!ctr++;FNR!=1' *.txt
说明:
FNR
是当前输入文件的行号ctr
是一个从0开始并递增的变量
每次我们看到文件的第一行ctr
对于第一个输入文件仅为零,因此!ctr
仅为真
对于第一个文件。ctr
为假,则第一个条件打印每个文件的第1行。演示:
$ printf '%s\n' hdr f1 f2 > f1.txt
$ printf '%s\n' hdr g1 g2 > f2.txt
$ printf '%s\n' hdr h1 h2 > f3.txt
$ awk 'FNR==1&&!ctr++;FNR!=1' *.txt
hdr
f1
f2
g1
g2
h1
h2
一个稍微简单的命令:
awk '!ctr++ || FNR!=1' *.txt
如果ctr
为零(仅对第一个文件的第一行为true)或该行不是文件的第一行,则打印一行。
答案 1 :(得分:0)
试试这个,它可能适合你:
sed -e '2,${/^YOUR_HEADER/d' -e '}' *.txt > all.txt