2016-08-03 61 views
2

之間匹配兩個字段,試圖將字段1,3與另一個文件中的字段1,2和第二個文件的打印行匹配。第一個文件是製表符分隔,第二個文件是csv分隔符。意外的令牌錯誤?
文件1在兩個文件AWK

1 x 12345 x x x 

文件2

1,12345,x,x,x 

腳本

awk -F',' FNR==NR{a[$1]=$1,$3; next} ($1,$2 in a) {print}' file1 file2 > output.txt 

回答

1

你幾乎釘吧!

awk 'NR==FNR{first[$1]=$3;next} $1 in first{if(first[$1]==$2){print}}' file1 FS="," file2 

輸出

1,12345,x,x,x 

注意

  1. 由於現場隔板是這兩個文件的不同,我們已經改變了它的文件之間。
  2. 這個腳本採用假設每個文件的第一個字段是唯一的,否則,腳本打破

[ switching field separator ]在文件之間。

+1

FS的切換爲優等。 ;) –

+1

我借用了[\ [this \]](http://stackoverflow.com/a/24517482/1620779)答案。 – sjsam

+0

仍然有問題...我需要添加-F','參數嗎? – mxttgen31

3

同樣的想法,但不依賴於所述第一字段的唯一性,但是該對代替

$ awk 'NR==FNR{a[$1,$3]; next} ($1,$2) in a' file1 FS=, file2 

1,12345,x,x,x 
+0

擊敗了我++;) – sjsam

+0

'^ 1'在文件之間很好地使用FS設置。 –

+0

從師傅身上學到:) – karakfa