我有多个文件,例如:(实际上我有 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