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

Row*_*and 11 command-line io-redirection awk shell-script text-processing

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

文件1.dat

2 5

6 9

7 1
Run Code Online (Sandbox Code Playgroud)

文件2.dat

3 7

8 4

1 3
Run Code Online (Sandbox Code Playgroud)

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

输出文件

6 9

8 4
Run Code Online (Sandbox Code Playgroud)

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

8 4
Run Code Online (Sandbox Code Playgroud)

我的 shell 脚本如下所示:

后.sh

TEND = 80

TINDX = 0

while [ $TINDX - lt $TEND]; do

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

TINDX = $((TINDX+1))

done
Run Code Online (Sandbox Code Playgroud)

jim*_*mij 20

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

awk 'FNR==2{print $0 > "output.dat"}' file{1..80}.dat
Run Code Online (Sandbox Code Playgroud)

  • 甚至更短的 `awk 'FNR==2' 文件{1..80}.dat > output.dat` (9认同)

小智 8

怎么办 head -n 2 input.dat | tail -n 1 | awk……


ara*_*aer 8

sed 就足够了:

sed -sn 2p file{1..80}.dat > output.dat
Run Code Online (Sandbox Code Playgroud)

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