これは私の入力ファイルです。
A B B A
A A A
B A B A
B B
A A
A B
すべての列が同じであれば、最初の列だけを印刷したいと思います。
それ以外の場合は印刷したいですmulti
。
希望の出力:
multi
A
multi
B
A
multi
誰が私を助けることができますか? (私はまたはawk
を好むsed
。)
答え1
AWKを使用:
awk '{ for (i = 2; i <= NF; i++) { if ($i != $1) { print "multi"; next } }; print $1 }'
各行は次のように処理されます。
- 2番目のフィールドから始めて、各フィールドを最初のフィールドと比較します。
- 違いが見つかったら、「multi」を印刷して次の行に移動します。
- 違いが見つからない場合(ループが終了するか、完全にスキップされます)。例えばフィールドがない場合、またはフィールドが 1 つだけ含まれる行の場合は、最初のフィールドを印刷して次の行に移動します。
答え2
awk
/はperl
仕事にとってより良いツールですが、次のものを使用することもできますsed
。
sed -E 's/^([^[:blank:]]*)([[:blank:]]+\1)*$/\1/;t;s/.*/multi/' infile
答え3
$ awk '{b=$1; gsub($1,""); if (/^\s*$/) {print b} else {print "multi"}}' file
multi
A
multi
B
A
multi