【问题标题】:Find string from a file to another file in shell script在shell脚本中从一个文件到另一个文件中查找字符串
【发布时间】:2014-12-02 02:23:00
【问题描述】:

我是 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_A 中的 URL(第 4 个字段)存在于 FILE_B 中,则输出将为:

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

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

我希望我的问题很清楚。谢谢。

【问题讨论】:

标签: bash shell awk sed grep


【解决方案1】:

这可能对你有用(GNU sed):

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

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

【讨论】:

    【解决方案2】:

    试试这个:

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

    我删除了文件 B 中的空格,以便 $4==$6 工作。

    我使用 paste 创建一个复合行,使用 , 作为分隔符来获得一个带有 , 的行。然后我使用awk 比较来检查两个文件中的 URL,如果找到匹配项,我会打印您关心的所有字段。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2023-01-16
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多