如何在awk中搜索具有特殊字符的模式

时间:2014-09-25 11:26:50

标签: shell awk

我必须逐行匹配file1和file2。但是file1的格式如下。如果使用ak命令在file2中使用下面的行进行搜索,则会在'='处出现语法错误时抛出错误。

File1:

Country_code=US/base_div_nbr=18/retail_channel_code=1/visit_date=2010-01-02/load_time_stamp=20100102058100
Country_code=US/base_div_nbr=18/retail_channel_code=1/visit_date=2010-01-02/load_time_stamp=20100102091000
Country_code=US/base_div_nbr=18/retail_channel_code=1/visit_date=2010-01-02/load_time_stamp=20100102067000

File2:

Country_code=US/base_div_nbr=18/retail_channel_code=1/visit_date=2010-01-02/load_time_stamp=20100102058100
Country_code=US/base_div_nbr=18/retail_channel_code=1/visit_date=2010-01-02/load_time_stamp=20100102091000

我从file1获取总行作为搜索模式,使用以下命令在file2中搜索:

awk "/$line/ {print ;}" file2

这里file1,在file2中找不到第3条记录,所以我需要知道这些差异

我对shell脚本非常陌生,所以请在此建议我。

2 个答案:

答案 0 :(得分:0)

这对于comm来说真的是一个工作,假设您可以对两个输入文件进行排序,但是如果您想使用awk这样的东西可能会根据您未说明的要求执行此操作:

awk 'NR==FNR {file1[NR]=$0; next} $0 != file1[FNR]' file1 file2

答案 1 :(得分:0)

如果我理解正确,您想要打印两个文件共有的行。在这种情况下,awk实际上不是最好的工具。你可以改为做其中一个

comm <(sort file1) <(sort file2)

grep -Fxf file1 file2

如果你真的想用awk来做,你可以试试

awk 'FNR==NR{a[$0]; next} $0 in a' file1 file2