关于bash:将多个文本文件的第一行复制到单个文件中

Copying first lines of multiple text files into single file

使用单个bash命令(允许使用管道,stdio)
将每个名称以ABC开头的文件的第一行复制到名为DEF的文件。

示例:

输入:

ABC0:

1
2
3
4
5
qwe\

rty\

uio\

ABC1:

1
2
3
4
5
asd\

fgh\

jkl\

ABC2:

1
2
3
4
5
zxc\

bvn\

m,.\

结果:

DEF:

1
2
3
4
5
qwe\

asd\

zxc\

已经尝试过cat ABC* | head -n1,但是它仅占用第一个文件的第一行,其余的省略。


您可能希望head -n1 ABC*head占据每个文件的第一行。从标准输入读取,head对其输入来自何处一无所知。

但是,

head添加了自己的标头以标识每行来自哪个文件,因此请使用awk

1
awk 'FNR == 1 {print}' ./ABC* > DEF

FNR是包含输入当前行的行号的变量,每次打开新文件时将其重置为0。使用./ABC*而不是ABC*可以防止包含=的文件名(如果=之前的部分是有效的awk变量名称,则awk会进行特殊处理。)HT William Pursell。)


假定文件名不包含空格或换行符,并且不存在名称以ABC

开头的目录

1
ls ABC* | xargs -n 1 head -n 1

-n 1确保head一次仅接收一个名称。

如果不满足上述条件,请使用建议的循环,如chepner,但要明确防止不是纯文件的目录条目,以避免head发出错误消息。