2

我想使用 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。

4

4 回答 4

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
于 2013-03-07T17:27:45.613 回答
2

另一种方法:

$ paste file1 file2 | awk 'NR==2{print $2,$4}'
1.033 1.080
于 2013-03-07T17:56:07.420 回答
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
于 2013-03-07T16:55:49.580 回答
0

另一种尝试的方法:

awk '{p=$2; getline<f} NR==2{print p,$2; exit}' f=file2 file1
于 2013-03-07T20:43:42.370 回答