主档案的内容 -
$ 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
您可以使用join来完成这项工作。
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
尝试:
$ 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'
$NF
,而不是第一个字段。因此用$1 in a
取代$NF in a
。a[$2]
。简单地引用a[$2]
就可以在数组a
中创建关键字,这是您使用测试$NF in a
所需的全部内容。让'定义一个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'