我的文件包含以下几行:
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
答案1
使用awk
:
awk '{ split($3,a,"/"); split($4,b,"/"); $(NF+1) = a[1] == b[1] ? "equal" : "diff" }; 1' file
这会在斜杠上分割第三个和第四个字段,然后根据分割字符串的第一个元素是否相同或不同添加一个新字段。
1
末尾的尾随导致修改的记录被输出。
答案2
您可以使用标准来做到这一点sed
:
sed 's_$_ diff_;s_\( [^/]*/\)\(.*\1.*\)diff_\1\2equal_'
- 悲观地,我们总是
diff
首先添加s_$_ diff_
- 如果从空格到下一个斜杠的序列在该行后面重复 ( ) ,那么我们用
s
替换diff
equal
[^/]*/
\1