awk:在awk脚本中分配shell变量

时间:2013-08-10 19:29:24

标签: shell unix awk

我在awk有一种情况,我需要将输入格式转换为另一种格式,然后使用单独处理的记录数。有什么办法可以使用shell变量来获取NREND section的值吗?类似的东西:

cat file1 | awk 'some processing END{SHELL_VARIABLE=NR}' > file2

然后在awk之外使用SHELL_VARIABLE。

我不想处理该文件,然后单独执行wc -l,因为文件很大。

2 个答案:

答案 0 :(得分:3)

一种方法:使用命令中的重定向,并在END块中打印结果。并使用命令替换来读取shell变量中的结果:

my_var=$(awk '{ some processing; print "your output" >>file2 } END { print NR }' file1)

答案 1 :(得分:3)

没有子进程可以影响父级的环境变量。您可以做的是直接将awk写入输出到文件,然后让它打印您想要stdout的值并捕获它。或者如果您愿意,可以将其反转并让awk将其打印到文件中,然后再将其读回。

顺便说一下,你有一个UUOC。

rows=$(awk '{ ...; print > "file2"} END {print NR}' file1)

或者

awk '... END{print NR > "rows"}' file1 >file2
rows=$(<rows)
rm rows
相关问题