2013-03-07 50 views
2

多个变量我想用awk处理多个文件,诸如
文件1:awk的多个文件的处理

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。

回答

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 
+0

。当然,这样简单。谢谢! – Pawelek 2013-03-07 17:46:14

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 
+0

他只想线2场2中的每个文件@Kent – 2013-03-07 17:58:06

2

一种不同的方法:

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

另一种方法试试:

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