比较2个文件,删除不常见的字符串脚本

时间:2013-03-11 22:40:44

标签: linux unix search scripting awk

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

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

示例file1.txt

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

示例file2.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"

谁能告诉我从哪里开始?

2 个答案:

答案 0 :(得分:0)

这个怎么样?

$ 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

答案 1 :(得分:0)

如果文件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