2017-10-08 79 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 3 4 

3 1 2 4 

例如與該輸入文件:

$ 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