awk - 将多个 .dat 文件的第二行输出到一个文件

awk - 将多个 .dat 文件的第二行输出到一个文件

我有多个文件,例如:(实际上我有 80 个)

文件1.dat

2 5

6 9

7 1

文件2.dat

3 7

8 4

1 3

我想最终得到一个包含所有第二行的文件。 IE

输出数据

6 9

8 4

到目前为止我所拥有的循环遍历文件名,但然后覆盖它之前的文件。例如上述文件的输出就是

8 4

我的 shell 脚本如下所示:

后.sh

TEND = 80

TINDX = 0

while [ $TINDX - lt $TEND]; do

awk '{ print NR==2 "input-$TINDX.dat > output.dat

TINDX = $((TINDX+1))

done

答案1

删除while循环并使用 shell 大括号扩展以及FNR内置awk变量:

awk 'FNR==2{print $0 > "output.dat"}' file{1..80}.dat

答案2

sed就足够了:

sed -sn 2p file{1..80}.dat > output.dat

-s需要选项来打印每个文件的第二行,否则仅打印第一个文件的第二行。

答案3

关于什么 ... head -n 2 input.dat | tail -n 1 | awk...

答案4

显然有很多方法可以做到这一点 - 我想我喜欢@aragaer 的 sed 答案最好

这是一个纯粹使用 bash 内置函数并且不需要派生任何外部实用程序的程序:

for f in file{1..80}.dat; do
    { read && read && printf "%s\n" "$REPLY"; } < "$f"
done > output.dat

相关内容