Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 在比较两条相似的线时,如何找出差异_Unix_Grep - Fatal编程技术网

Unix 在比较两条相似的线时,如何找出差异

Unix 在比较两条相似的线时,如何找出差异,unix,grep,Unix,Grep,我有一个日志文件,其中包含以下日志语句 e、 g 启动事务id之前= 启动事务id= .... 启动事务id之前= 启动事务id= 当我为“Before”做一个简单的grep时,我看到400条语句,但是 当我为“After”做一个简单的grep时,我看到402条语句 如何找到这些不成对出现的语句。提取ID前的和ID后的,然后将它们区分开来,如下所示: $ diff -wb <(grep Before file | cut -d= -f2 | sort) <(grep After f

我有一个日志文件,其中包含以下日志语句

e、 g

启动事务id之前=
启动事务id=
....
启动事务id之前=
启动事务id=
当我为“Before”做一个简单的grep时,我看到400条语句,但是 当我为“After”做一个简单的grep时,我看到402条语句


如何找到这些不成对出现的语句。

提取ID前的
和ID后的
,然后将它们区分开来,如下所示:

$ diff -wb <(grep Before file | cut -d= -f2 | sort) <(grep After file | cut -d= -f2 | sort)

提取ID之前的
和之后的
,然后将它们区分开来,如下所示:

$ diff -wb <(grep Before file | cut -d= -f2 | sort) <(grep After file | cut -d= -f2 | sort)

如果前后配对,则应具有相同的
唯一编号

awk -F= '{a[$2]++;}END{for(i in a)if(a[i]!=2)print "id:"i}' file
将打印那些未配对的ID

e、 g:


如果前后配对,则应具有相同的
唯一编号

awk -F= '{a[$2]++;}END{for(i in a)if(a[i]!=2)print "id:"i}' file
将打印那些未配对的ID

e、 g:


grep
也不是这个工作的最佳选择,因为它不能读取多行。您可以使用-B1成对地阅读它们,但仍然需要使用更强大的工具(如
sed
awk
或其他工具)来解析它们

这里还有另一种方法,它也适用于在行前获得额外功能的情况(echo的
echo
就在那里,这样你就可以干运行它):

它的工作原理是只检查唯一的ID。因为我不知道你在那里得到了什么样的内容,也许它们是现有条目的副本,在这种情况下,你必须以不同的方式来做。以下是更安全的方法,它捕获两种情况并返回ID频率大于或小于2的事件:

$ echo 'Before starting transaction id = 123
After starting transaction id = 123
After starting transaction id = 567
Before starting transaction id = 567
After starting transaction id = 567' | 
  sort -k6 | uniq -c -f5 | grep -v "^[[:space:]]*2[[:space:]]"
3 After starting transaction id = 567

grep
也不是这个工作的最佳选择,因为它不能读取多行。您可以使用-B1成对地阅读它们,但仍然需要使用更强大的工具(如
sed
awk
或其他工具)来解析它们

这里还有另一种方法,它也适用于在行前获得额外功能的情况(echo的
echo
就在那里,这样你就可以干运行它):

它的工作原理是只检查唯一的ID。因为我不知道你在那里得到了什么样的内容,也许它们是现有条目的副本,在这种情况下,你必须以不同的方式来做。以下是更安全的方法,它捕获两种情况并返回ID频率大于或小于2的事件:

$ echo 'Before starting transaction id = 123
After starting transaction id = 123
After starting transaction id = 567
Before starting transaction id = 567
After starting transaction id = 567' | 
  sort -k6 | uniq -c -f5 | grep -v "^[[:space:]]*2[[:space:]]"
3 After starting transaction id = 567

diff“`cat file | grep在`` cat file | grep在``之前”
?现在还没到狂欢节的时候,所以我无法测试它。下线总是前一行吗?如果它们是成对的,
diff“`cat file | grep在`` cat file | grep在``之前”
?现在还没到狂欢节的时候,所以我无法测试它。下线总是前一行吗?如果他们是成对的
$ echo 'Before starting transaction id = 123
After starting transaction id = 123
After starting transaction id = 567
Before starting transaction id = 567
After starting transaction id = 567' | 
  sort -k6 | uniq -c -f5 | grep -v "^[[:space:]]*2[[:space:]]"
3 After starting transaction id = 567