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

用于多文件处理的awk多变量,awk,Awk,我想使用awk处理多个文件,如 文件1: 1.045 2.1.033 31.029 文件2: 1 1.078 21.080 31.090 但是我感兴趣的是从每个文件中存储一个特定的字段,然后在一行中打印出来。例如,我希望两个文件中第二行的第二个字段,以便输出为: 1.0331.080 我可以让awk将每个文件中的相关字段存储在单独的变量或数组的单独字段中吗?我试过: awk ' BEGIN{} FNR==2{var1=$2;nextfile} FNR==2{var2=$2} END{printf

我想使用awk处理多个文件,如
文件1:

1.045
2.1.033
31.029

文件2:

1 1.078
21.080
31.090

但是我感兴趣的是从每个文件中存储一个特定的字段,然后在一行中打印出来。例如,我希望两个文件中第二行的第二个字段,以便输出为:

1.0331.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。

是否要这样做

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
你想要这个吗

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

在您的示例中,第三行从未计算过,您可以这样求解:

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
但是,这种方法很难一概而论,我宁愿这样做:

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

在您的示例中,第三行从未计算过,您可以这样求解:

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
但是,这种方法很难一概而论,我宁愿这样做:

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
另一种方法:

$ paste file1 file2 | awk 'NR==2{print $2,$4}'
1.033 1.080
另一种方法:

$ paste file1 file2 | awk 'NR==2{print $2,$4}'
1.033 1.080

另一种尝试方法:

awk '{p=$2; getline<f} NR==2{print p,$2; exit}' f=file2 file1

awk'{p=$2;getline另一种尝试方法:

awk '{p=$2; getline<f} NR==2{print p,$2; exit}' f=file2 file1

awk'{p=$2;GetLine他只需要每个文件@Kent中第2行的字段2他只需要每个文件@Kent中第2行的字段2