3

我是 linux SO 和 bash 命令的新手,我认为有更多经验的人可以帮助我。我想将 2 个不同的文本文件与执行日志进行比较,但有些行(不是全部)以这样的时间标记开头:

12345 ps line 1 content 
23456 ps line 2 content 
line 3 content 
345 ps line 4 content

这些标记在每个日志中都有不同的值,但是,在那个比较中,我不关心它们,我只想比较行内容并忽略它们。我可以使用“sed”命令生成没有该令牌的新文件,然后对它们进行比较,但我假装重复这样做,如果我只使用一个命令或一个 sh 文件,可以节省一些时间。我尝试将“sed”和“diff”结合使用,但没有成功。有人可以帮助我吗?

4

2 回答 2

7

您可以使用以下 sed one liner 删除文件开头的数字:

sed 's/^[0-9]* ps//g' file1

要区分两个这样的文件(更少的时间戳),您可以使用进程替换

diff <(sed 's/^[0-9]* ps//g' file1) <(sed 's/^[0-9]* ps//g' file2)
于 2012-12-19T14:35:03.000 回答
0

未经测试,因为您没有显示 2 个输入文件和预期的输出,但根据您的描述,我认为这可以满足您的要求:

awk '
   { sub(/^[[:digit:]]+[[:space:]]*/,"") }
   NR==FNR { file1[FNR] = $0; next }
   { print ($0 == file1[FNR] ? "==" : "!="), $0 }
' file1 file2

如果不这样做,请发布一些小样本输入和预期输出。

于 2012-12-19T15:24:17.413 回答