2017-10-08 34 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