我在awk
有一种情况,我需要将输入格式转换为另一种格式,然后使用单独处理的记录数。有什么办法可以使用shell变量来获取NR
中END section
的值吗?类似的东西:
cat file1 | awk 'some processing END{SHELL_VARIABLE=NR}' > file2
然后在awk之外使用SHELL_VARIABLE。
我不想处理该文件,然后单独执行wc -l
,因为文件很大。
答案 0 :(得分:3)
一种方法:使用awk命令中的重定向,并在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