awk用于多个文件处理的多个变量

时间:2013-03-07 16:49:53

标签: awk

我想使用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 个答案:

答案 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