同じファイルの行列を比較するには?

同じファイルの行列を比較するには?

これは私の入力ファイルです。

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

関連情報