在shell脚本中查找从文件到另一个文件的字符串

时间:2014-12-02 02:23:00

标签: bash shell awk sed grep

我是shell脚本新手。只想知道如何通过以下方式获得我想要的结果:

我有两个文件(FILE_A和FILE_B)

FILE_A包含:

   09228606355,71295939,1,http://sun.net.ph/043xafj.xml,01000001C123000D30
   09228505450,71295857,1,http://sun.net.ph/004xafk.xml,01000001C123000D30

FILE_B包含:

  http://sun.net.ph/161ybfq.xml                     ,9220002354016,93111
  http://sun.net.ph/004xafk.xml                     ,9220002354074,93111

如果FILE_B中存在FILE_A中的URL(第4个字段),则out将为:

  09228505450,71295857,1,http://sun.net.ph/004xafk.xml,01000001C123000D30,9220002354074,93111

它将在FILE_A中显示整行,并添加FILE_B的第2和第3个字段。

我希望我的问题很明确。谢谢。

2 个答案:

答案 0 :(得分:1)

这可能适合你(GNU sed):

sed -r 's/^\s*(\S+)\s*,(.*)/\\#^([^,]*,){3}\1#s#$#,\2#p/' fileB | sed -nrf - fileA

这将从fileB构建一个sed脚本并针对fileA运行它。第二个sed脚本以silent模式运行,只打印出与sed脚本匹配的那些行。

答案 1 :(得分:0)

试试这个:

paste -d , A B  | awk -F , '{if ($4==$6) print "match", $1,$2,$3,$4,$5,$7,$8;}'

我删除了文件B中的空格,以使$4==$6生效。

我使用粘贴创建一个复合线,使用,作为分隔线来获取一条线,。然后我使用awk比较检查两个文件中的URL,如果找到匹配,则打印您关注的所有字段。