2017-10-08 1 views
0

awkプログラムを書き込むファイルの列を並べ替えようとしています。列の順序を変更するにはawkで列を並べ替えるためのループ

enter image description here

私の小さなプログラムです:

awk -v column=number 'BEGIN {FS=","; ORS="\n"; OFS=","; n=column} {for (i=1; i<=NF; i++){if (i!=n) $(i+1)=$i else $1=$i} {print $0}' file_name 

私は最初の数と、その後remaingものと指定された列を入れたいと思いますが、それがないファイルは次のように見えます作業しません。

+0

'-v列を使用= $ number' –

+5

テキストで画像を交換してください。 – Cyrus

+2

を入力して、期待される出力をテキストとして追加します。 –

答えて

0

反復処理中にフィールドを上書きしています。代わりにcolumnの位置から最初の位置に値を「バブル」する必要があります。この入力ファイルを使用して例えば

3 1 2 4 

1 2 3 4 

はあなたがここに列3を移動する方法を考えてみましょう

$ cat table 
1 2 3 4 
2 3 4 5 
3 4 5 6 
4 5 6 7 

あなたはこのようにそれを行うことができます(セパレーター読みやすくするために空白に変更):

$ awk -v col=3 '{val=$col; for (i=col; i>1; i--) $i=$(i-1); $1=val; print $0}' table 
3 1 2 4 
4 2 3 5 
5 3 4 6 
6 4 5 7 
0

必要な列を最初に印刷し、次に残りの列を印刷するだけです。

$ awk -v column=3 -F "," '{n=column; printf $column; for (i=1; i<NF; i++){if (i!=n) printf ","$i} print ","$NF}' file 

入力:

10,Hello,meow,20,30 
hello,world,34,meow,60 

出力:

meow,10,Hello,20,30 
34,hello,world,meow,60 
関連する問題