使用awk保持文件1中的行与文件2中的值匹配

时间:2017-12-22 07:10:13

标签: shell awk

主文件的内容 -

$ cat Sort_File2.csv 

'SR'|'2017-09-01 00:19:13'|'+05:30'|'1A3LA7015L5O'|'5042449534546015801549'   
'SR'|'2017-09-01 00:19:13'|'+05:30'|'1A3LA7015L5O'|'5042449534546015801549'    
'SR'|'2017-09-01 00:19:13'|'+05:30'|'1A3LA7015L5Q'|'5042449536906016501541'    
'SR'|'2017-09-01 00:19:20'|'+05:30'|'1A3LA7015L6I'|'5042449603146028701548'

要匹配的文件的内容 -

$ cat DuplicatesEqTo1_f2.csv 

1|'5042449536906016501541'    
1|'5042449603146028701548'

我希望Awk语句存储在文件中,Sort_File2.csv的行与文件DuplicatesEqTo1_f2.csv中的值匹配。

我想要的输出 -

'SR'|'2017-09-01 00:19:13'|'+05:30'|'1A3LA7015L5Q'|'5042449536906016501541'    
'SR'|'2017-09-01 00:19:20'|'+05:30'|'1A3LA7015L6I'|'5042449603146028701548'

注意我尝试了下面的声明它不起作用而且没有返回任何内容 -

awk -F'|' 'NR==FNR{++a[$2];next} $1 in a' DuplicatesEqTo1_f1.csv Sort_File1.csv

2 个答案:

答案 0 :(得分:1)

尝试:

$ awk -F'|' 'NR==FNR{a[$2];next} $NF in a' DuplicatesEqTo1_f1.csv Sort_File1.csv
'SR'|'2017-09-01 00:19:13'|'+05:30'|'1A3LA7015L5Q'|'5042449536906016501541'
'SR'|'2017-09-01 00:19:20'|'+05:30'|'1A3LA7015L6I'|'5042449603146028701548'

注释

  1. 您要匹配的字段是该行的最后一个字段$NF,而不是第一个字段。因此,将$1 in a替换为$NF in a

  2. 没有坏处,但没有必要增加a[$2]。只需引用a[$2]即可在数组a中创建密钥,这是您使用测试$NF in a所需的全部内容。

  3. 与shell变量

    指定的列匹配

    让'定义一个shell变量var1,并匹配列号$var1

    $ var1=5
    $ awk -F'|' -v col="$var1" 'NR==FNR{a[$2];next} $col in a' DuplicatesEqTo1_f1.csv Sort_File1.csv
    'SR'|'2017-09-01 00:19:13'|'+05:30'|'1A3LA7015L5Q'|'5042449536906016501541'
    'SR'|'2017-09-01 00:19:20'|'+05:30'|'1A3LA7015L6I'|'5042449603146028701548'
    

答案 1 :(得分:0)

您可以使用联接来完成此项工作。

var=5;join -t '|' -1 "$var" -2 2 -o 1.1 1.2 1.3 1.4 1.5 Sort_File2.csv DuplicatesEqTo1_f2.csv