Oren Hamama Asked: 2022-09-20 22:29:16 +0800 CST2022-09-20 22:29:16 +0800 CST 2022-09-20 22:29:16 +0800 CST 剪切和比较文件中的字符串 772 我有文件包含以下几行: 3 5 asd/sdf/rdc fgd/ghw/rtt 4 7 axd/sdf/rdc axd/ghw/ert 8 2 drf/sdf/uhg fgd/ghw/gcd 我只想比较第 3 列和第 4 列中的名字并打印是否匹配 - 结果应该是: 3 5 asd/sdf/rdc fgd/ghw/rtt diff 4 7 axd/sdf/rdc axd/ghw/ert equal 8 2 drf/sdf/uhg fgd/ghw/gcd diff linux cut 2 个回答 Voted Philippos 2022-09-20T23:42:28+08:002022-09-20T23:42:28+08:00 您可以使用标准执行此操作sed: sed 's_$_ diff_;s_\( [^/]*/\)\(.*\1.*\)diff_\1\2equal_' 悲观地,我们总是 diff先加上s_$_ diff_ 然后我们s用diff替换equal,如果从空格到下一个斜杠的序列在后面的行 [^/]*/中重复 ( )\1 Best Answer Kusalananda 2022-09-20T23:58:10+08:002022-09-20T23:58:10+08:00 使用awk: awk '{ split($3,a,"/"); split($4,b,"/"); $(NF+1) = a[1] == b[1] ? "equal" : "diff" }; 1' file 这会拆分斜杠上的第 3 和第 4 个字段,然后根据拆分字符串的第一个元素是相等还是不同来添加一个新字段。 末尾的拖尾1导致输出修改的记录。
您可以使用标准执行此操作
sed
:diff
先加上s_$_ diff_
s
用diff
替换equal
,如果从空格到下一个斜杠的序列在后面的行[^/]*/
中重复 ( )\1
使用
awk
:这会拆分斜杠上的第 3 和第 4 个字段,然后根据拆分字符串的第一个元素是相等还是不同来添加一个新字段。
末尾的拖尾
1
导致输出修改的记录。