我有两个文件: 文件1:
123,hj,0
345,788,0
文件2:
nmmnm,m kjlfkj jjljk(gjhgjh;id:123;)
klkl,nkklmk kljlk kjkn(vnbvmn;nbvbn;id:678;jlk;);
hgdsghhj (khj;id:345;)
如果id: and ;
之间的数字与file1中的column1不匹配,我想删除file2中的行。
输出:
nmmnm,m kjlfkj jjljk(gjhgjh;id:123;)
hgdsghhj (khj;id:345;)
答案 0 :(得分:0)
尝试这样的事情:
$ awk -F, 'NR==FNR{a[$1];next}match($0,/id:[0-9]+/)&&substr($0,RSTART+3,RLENGTH-3) in a' file1 file2
nmmnm,m kjlfkj jjljk(gjhgjh;id:123;)
hgdsghhj (khj;id:345;)
这使用第一个文件的第一个字段来设置数组a
中的键。对于第二个文件,match
与substr
一起使用以提取包含id 1 的行的部分。从第二个文件打印行,其中id在数组中。
1 如果match
成功,变量RSTART
和RLENGTH
将设置为匹配的开头以及与模式匹配的字符串的长度。 substr
提取id,即匹配开始时的3个字符。
答案 1 :(得分:0)
首先生成所有要接受的模式,然后grep第二个文件:
cut -d ',' -f1 file1 | xargs -L1 printf "id:%s;\n" | fgrep -f - file2
或者,如果您希望分成两个活动:
cut -d ',' -f1 file1 | xargs -L1 printf "id:%s;\n" > patterns
fgrep -f patterns file2