2012-09-21 192 views
1

我在shell脚本中使用了awk,它按预期工作。在awk中打​​印列

awk -F'^' 'BEGIN {OFS="^"} {print $1,$2,$3,$4,$5}' 

当我需要改变的列数,我只需增加$ 6 $ 7,$ 8

改变print语句是否有声明它在一个变量并使用该变量AWK的方式?

columns=8 
awk -F'^' 'BEGIN {OFS="^"} {print $1..$columns}' 

回答

1

你可以使用printf和循环之后的print会给你在该行的末尾换行始终使用for -loop

{for(i=1;i<=columns;i++)printf("%s ", $i);print '\n'}' 

2

可以使用awk -v指定一个shell变量,然后遍历所有列:

awk -v cols="$columns" '{ for (i=1; i<=cols; i++) printf (i!=cols) ? $i OFS : $i"\n" }' file.txt 
3

待办事项它通过定义一个函数。 awk 'function col(s,e){ret="";for(i=s;i<=e;i++){ret=ret" "$i}return ret}{print col(2,6)}'

1

这可能会为你工作:

echo 1 2 3 4 5 6 7 8 9 | awk -vnf=5 '{NF=nf}1' 
1 2 3 4 5