2013-03-07 49 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