Linux 如果行匹配,如何在目标文件中标记行

Linux 如果行匹配,如何在目标文件中标记行,linux,bash,perl,awk,sed,Linux,Bash,Perl,Awk,Sed,我的bash脚本从文件-/tmp/file.CSV读取每一行,直到EOF 并查找该行是否与其他文件-/tmp/target.CSV中的行匹配(如果是完全匹配的bash脚本,则需要在匹配行的开头添加“+”) 比如说 line="/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11" ( from /tmp/file.CSV ) 我们看到$line与line完全匹配: 1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobecon

我的bash脚本从文件-/tmp/file.CSV读取每一行,直到EOF

并查找该行是否与其他文件-/tmp/target.CSV中的行匹配(如果是完全匹配的bash脚本,则需要在匹配行的开头添加“+”)

比如说

  line="/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11" ( from /tmp/file.CSV )
我们看到$line与line完全匹配:

    1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11",fnt,rfdr,OK ( from /tmp/target.CSV )
然后我们需要在/tmp/target.CSV中的行中添加“+”,如下所示

   +1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11",fnt,rfdr,OK
请建议如何在我的bash脚本中使用sedawkperl一行程序

 more /tmp/target.CSV


 1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11",fnt,rfdr,OK
 2,Ama,LINUX,"/VPNfig/EME/EM8/Franlecom Eana SA/Amen",comrse,temporal,OK
 3,ArnTel,LINUX,"/VPConfig/EME/EM3/ArmenTem Armenia)/ArmenTe",Coers,FAIL
 4,Ahh,LINUX,"/VPConfig/EMA/EM/llk/AAe",Coers,FAIL
 142,ucell,LINUX,/VPNAAonfig/EMEA/EM3/Ucell/ede3fc34,Glo,G/rvrev443,OK

 more file.CSV

 /VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11
 /VPNfig/EME/EM8/Franlecom Eana SA/Amen
 /VPConfig/EME/EM3/ArmenTem Armenia)/ArmenTe
 /VPConfig/EME/EM0/TTR/Ar
 /VPNAAonfig/EMEA/EM3/Ucell/ede3fc34
我的bash代码

 while read -r line
 do

 grep -iq "$line" /tmp/target.CSV 

 if [[  $? -ne 0 ]]
 then
       echo  "$line" NOT MATCH target.CSV
      else

     sed .................

     fi
 done <  /tmp/file.CSV
输出:

+1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11",fnt,rfdr,OK
+2,Ama,LINUX,"/VPNfig/EME/EM8/Franlecom Eana SA/Amen",comrse,temporal,OK
+3,ArnTel,LINUX,"/VPConfig/EME/EM3/ArmenTem Armenia)/ArmenTe",Coers,FAIL
4,Ahh,LINUX,"/VPConfig/EMA/EM/llk/AAe",Coers,FAIL
+1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11",fnt,rfdr,OK
+2,Ama,LINUX,"/VPNfig/EME/EM8/Franlecom Eana SA/Amen",comrse,temporal,OK
+3,ArnTel,LINUX,"/VPConfig/EME/EM3/ArmenTem Armenia)/ArmenTe",Coers,FAIL
 4,Ahh,LINUX,"/VPConfig/EMA/EM/llk/AAe",Coers,FAIL
+1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11",fnt,rfdr,OK
+2,Ama,LINUX,"/VPNfig/EME/EM8/Franlecom Eana SA/Amen",comrse,temporal,OK
+3,ArnTel,LINUX,"/VPConfig/EME/EM3/ArmenTem Armenia)/ArmenTe",Coers,FAIL
 4,Ahh,LINUX,"/VPConfig/EMA/EM/llk/AAe",Coers,FAIL
+142,ucell,LINUX,/VPNAAonfig/EMEA/EM3/Ucell/ede3fc34,Glo,G/rvrev443,OK

输出:

+1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11",fnt,rfdr,OK
+2,Ama,LINUX,"/VPNfig/EME/EM8/Franlecom Eana SA/Amen",comrse,temporal,OK
+3,ArnTel,LINUX,"/VPConfig/EME/EM3/ArmenTem Armenia)/ArmenTe",Coers,FAIL
4,Ahh,LINUX,"/VPConfig/EMA/EM/llk/AAe",Coers,FAIL
+1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11",fnt,rfdr,OK
+2,Ama,LINUX,"/VPNfig/EME/EM8/Franlecom Eana SA/Amen",comrse,temporal,OK
+3,ArnTel,LINUX,"/VPConfig/EME/EM3/ArmenTem Armenia)/ArmenTe",Coers,FAIL
 4,Ahh,LINUX,"/VPConfig/EMA/EM/llk/AAe",Coers,FAIL
+1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11",fnt,rfdr,OK
+2,Ama,LINUX,"/VPNfig/EME/EM8/Franlecom Eana SA/Amen",comrse,temporal,OK
+3,ArnTel,LINUX,"/VPConfig/EME/EM3/ArmenTem Armenia)/ArmenTe",Coers,FAIL
 4,Ahh,LINUX,"/VPConfig/EMA/EM/llk/AAe",Coers,FAIL
+142,ucell,LINUX,/VPNAAonfig/EMEA/EM3/Ucell/ede3fc34,Glo,G/rvrev443,OK
无论每行是否以单个空格开头,此选项都有效:

awk -F\" -v OFS=\" 'FNR==NR{ a[$0]++; next} { sub(/^ ?/, $2 in a ? "+" : " ") } 1' file.csv target.csv
试一试

更新(1) 输出:

+1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11",fnt,rfdr,OK
+2,Ama,LINUX,"/VPNfig/EME/EM8/Franlecom Eana SA/Amen",comrse,temporal,OK
+3,ArnTel,LINUX,"/VPConfig/EME/EM3/ArmenTem Armenia)/ArmenTe",Coers,FAIL
4,Ahh,LINUX,"/VPConfig/EMA/EM/llk/AAe",Coers,FAIL
+1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11",fnt,rfdr,OK
+2,Ama,LINUX,"/VPNfig/EME/EM8/Franlecom Eana SA/Amen",comrse,temporal,OK
+3,ArnTel,LINUX,"/VPConfig/EME/EM3/ArmenTem Armenia)/ArmenTe",Coers,FAIL
 4,Ahh,LINUX,"/VPConfig/EMA/EM/llk/AAe",Coers,FAIL
+1,ull,LINUX,"/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11",fnt,rfdr,OK
+2,Ama,LINUX,"/VPNfig/EME/EM8/Franlecom Eana SA/Amen",comrse,temporal,OK
+3,ArnTel,LINUX,"/VPConfig/EME/EM3/ArmenTem Armenia)/ArmenTe",Coers,FAIL
 4,Ahh,LINUX,"/VPConfig/EMA/EM/llk/AAe",Coers,FAIL
+142,ucell,LINUX,/VPNAAonfig/EMEA/EM3/Ucell/ede3fc34,Glo,G/rvrev443,OK
更新(2)
试试Perl的一行代码:

perl -pi -e '$_="+".$_ if($_=~m{/VPNfig/EME/EM3/Ucll/ucelobeconn/6EKoHH11}is);' /tmp/target.CSV

在某些情况下,我发现有些行应该用+来注释,但它们不是marked@maihabunash也许要确保它们是UNIX格式的行尾。尝试向所有文件传递
sed-i的|\r | |'
。不管有什么问题,一定要更新你的帖子。也可能你的
文件.csv
中有尾随空格。您可以通过将
FNR==NR{a[$0]++;next}
更改为
FNR==NR{sub(/[\t\r]+/,”);a[$0]++;next}
来忽略它们。我尝试awk-F\“-v of S=\”'FNR==NR{sub sub(/[\t\r]+/,”);a[$0]+;next}$2在a{$0=“$0}.1'(但这不会在文件中添加任何“?”确定吗?我很快会检查THX