2016-08-03 72 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