我想使用awk来处理多个文件,例如
文件1:
1 1.045
2 1.033
3 1.029
文件2:
1 1.078
2 1.080
3 1.090
但我有兴趣存储每个文件中的特定字段,然后将它们全部打印在一行上。例如,我想要两个文件中第二行的第二个字段,以便输出为:
1.033 1.080
我可以使用awk将每个文件中的字段存储在单独的变量中或数组的单独字段中吗?我试过了:
awk '
BEGIN{}
FNR==2{var1=$2;nextfile}
FNR==2{var2=$2}
END{printf "%6.3f %6.3f\n", var1,var2}' file1 file2
但是这会用第二个文件中的字段覆盖var1,而不会处理var2。
答案 0 :(得分:2)
在你的例子中,永远不会评估第三行,你可以这样解决:
awk '
BEGIN{}
FNR==2 && !var1 {var1=$2;nextfile}
FNR==2{var2=$2}
END{printf "%6.3f %6.3f\n", var1,var2}' file1 file2
但是,这种方法难以概括,我宁愿这样做:
awk 'FNR==row { printf "%6.3f ", $col } END { printf "\n" }' row=2 col=2 file1 file2
输出:
1.033 1.080
答案 1 :(得分:2)
另一种方法:
$ paste file1 file2 | awk 'NR==2{print $2,$4}'
1.033 1.080
答案 2 :(得分:0)
awk 'NR==FNR{a[$1]=$2;next}$1 in a{print a[$1],$2}' file1 file2
输出:
1.045 1.078
1.033 1.080
1.029 1.090
答案 3 :(得分:0)
另一种尝试方法:
awk '{p=$2; getline<f} NR==2{print p,$2; exit}' f=file2 file1