1

我在 shell 脚本中使用 awk,它按预期工作。

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

当我需要更改列数时,我只需通过添加 $6,$7,$8 来更改打印语句

有没有办法在变量中声明它并在 awk 中使用该变量?

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

5 回答 5

3

通过定义一个函数来做到这一点。 awk 'function col(s,e){ret="";for(i=s;i<=e;i++){ret=ret" "$i}return ret}{print col(2,6)}'

于 2012-09-21T03:23:50.390 回答
2

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

awk -v cols="$columns" '{ for (i=1; i<=cols; i++) printf (i!=cols) ? $i OFS : $i"\n" }' file.txt
于 2012-09-21T03:19:23.117 回答
1

你总是可以使用for-loop

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

usingprintfprintafter 循环将为您提供行尾的换行符。

于 2012-09-21T03:16:58.507 回答
1

这可能会实现您的目标:

column=8
awk '{print $'$column'}'

参考: http ://www.grymoire.com/Unix/Awk.html#uh-4

于 2012-09-21T03:17:16.690 回答
1

这可能对您有用:

echo 1 2 3 4 5 6 7 8 9 | awk -vnf=5 '{NF=nf}1'
1 2 3 4 5
于 2012-09-21T12:32:42.973 回答