如果我有300个文件:
f_1.dat,f_2.dat,......,f_300.dat
例如,文件 f_114.dat 具有类似
的结构原子(指数):
114
Ave:cosp1 cosp2 cosp3:
-0.74 -0.54 -0.37
...
我想从某些文件中提取第二行(例如,数字114)和第四行(三个数字)(这些文件是 f_114.dat,f_182.dat,...,f_249。 300个文件中的dat )并将它们合并到同一个文件中,例如:
114 -0.74 -0.54 -0.37
182 -0.72 -0.59 -0.37
...
我试过结构,命令是
for i in `114,182,251,131,183,257,140,191,31,148,192,48,151,195,51,92,177,249`; do awk -v num=$i 'NR=2&&NR=4{print $0}' f_$i.dat > $i.dat; done
但错误表明存在语法错误。 你能解决这个问题吗?
答案 0 :(得分:1)
我想你想要这样的东西:
for i in {114,182,251,131,183,257,140,191,31,148,192,48,151,195,51,92,177,249} ; do
awk 'BEGIN {ORS=" "} NR==2 || NR==4' f_$i.dat
echo ""
done > merged-file.dat
你的for-loop
存在一些问题do
; for i in $LIST ; do ... ; done
$LIST
部分无效-v num=$i
表达式中未使用num
变量,因此不需要awk
> $i.dat
放在for循环中将无效,因为它们输出到单独的文件; > $OUTFILE.dat
置于for-loop 或 >>
)到同一个文件中,例如:for i in ... ; do ... >> OUTFILE.dat ; done