【问题标题】:compare 2 files, delete uncommon strings scripting比较 2 个文件,删除不常见的字符串脚本
【发布时间】:2013-02-27 07:20:58
【问题描述】:

我有两个文件。 1 个文件选择了输入和参数

另一个有所有的参数和定义

示例文件1.txt

 message id: "close"
 message id: "open"
 message id: "down"
 message id: "up"

示例文件2.txt

  #comment
  message id: "close"
  message value: " to turn off"

  #comment
  message id: "open"
  message value: "to inite"

等等

我想使用文件1的字符串参数在file2.txt中搜索消息id。

我想在每个消息 id、值和注释前用 " 标记,所以它看起来像这样:(仅当消息 id 在 file1 中时)

 " #comment
 " message id: "close"
 " message value: " to turn off"

 " #comment
 " message id: "open"
 " message value: "to inite"

谁能告诉我从哪里开始?

【问题讨论】:

  • 可能是您的awk 或python 脚本的工作。
  • 删除后file3.txt和file2.txt有什么区别
  • file2 将具有原始文件。文件 3 将仅包含 file1 中的消息 ID

标签: linux unix search scripting awk


【解决方案1】:

这个怎么样?

$ cat file1.txt | xargs -I % grep file2.txt -e % | cut -d \" -f 2
open
close

编辑:另一种方式。

$ for i in `cat file1.txt`; do grep file2.txt -e $i | cut -d \" -f 2; done
open
close

【讨论】:

  • 但这意味着我每次都需要输入"message id: "close""?
  • 它自己写入文件,所以你不必自己编辑文件。
  • 嗯。出于某种原因,它给了我这个错误,“xargs: Missing closing quote (' or ") before newline”
  • 你完全复制了吗?对我来说很好。
  • 可能是因为我使用 msk 为 windows 带了套件? ..我复制和粘贴,只是使用不同的文件名。
【解决方案2】:

如果文件 2 中的记录上方总是有注释,并且它们由不包含空格的空行分隔,您可以尝试:

awk 'NR==FNR{A[$0]; next}$2 in A{gsub(/^|\n/,"&\"")}1' file1 RS= ORS='\n\n' FS='\n' file2

对于您的特定示例文件,需要匹配的字符位置 1 和或 2 中有空格,例如:

awk 'NR==FNR{A[" " $0]; next}$2 in A{gsub(/^|\n/,"&\"")}1' file1 RS= ORS='\n\n' FS='\n' file2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    相关资源
    最近更新 更多