私のファイルには次の行が含まれています。
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
これはスラッシュで3番目と4番目のフィールドを分割し、分割文字列の最初の要素が等しいかどうかによって新しいフィールドを追加します。
1
最後に後続すると、変更されたレコードが出力されます。
答え2
標準を使用してこれを行うことができますsed
。
sed 's_$_ diff_;s_\( [^/]*/\)\(.*\1.*\)diff_\1\2equal_'
- 悲観的に、私たちは常に
diff
最初に追加します。s_$_ diff_
- スペースから次のスラッシュまでの順序が行()の後で繰り返されると、
s
次のように置き換えられます。diff
equal
[^/]*/
\1