2

私はfile1を持っています:

6 
3 
6 
9 
2 
6

このコマンドは結果を出力します:

awk 'NR==1{a=$1};$0!=a' file1
3 
9 
2

今私はfile2を持っています:

6 1 2 3 4 5 
3 3 4 4 4 6 
6 5 2 2 5 1 
9 1 3 5 4 1 
2 5 6 4 8 5 
6 1 5 2 3 1

同じことをしたいのですが、file2を使用します。結果を印刷したい:

3 3 4 4 5 6 
9 5 3 2 8 1 
2 5 6 5 3 1 
    5 4   1 
      2

awkでやりたいです。ご協力ありがとうございました。

4

1 に答える 1

1

AWKは、行を1つずつ処理するために作成されているため、異なる行間で数値を上下にシフトしようとしているため、実際には適していません。そうは言っても、このモンスターはあなたが望むことをするはずです:

awk 'NR==1{nc=NF;for(i=1;i<=nc;i++)a[i]=$i}{for(i=1;i<=nc;i++){if($i!=a[i]){v[m[i]++,i]=$i;if(m[i]>nl)nl=m[i]}}}END{for(l=0;l<nl;l++){for(i=1;i<=nc;i++){if(l<m[i]){printf("%d ", v[l,i])}else{printf("  ")}}printf("\n")}}'

一方、数値の行列が入れ替わっていた場合、このタスクははるかに簡単でした。

awk '{for(i=2;i<=NF;i++)if($i!=$1)printf(" %d",$i);printf("\n")}'
于 2012-11-11T11:44:00.843 に答える