我有一种情况awk
,我需要将输入格式转换为另一种格式,然后使用单独处理的记录数。有什么方法可以使用 shell 变量来获取 中的值NR
吗END section
?就像是:
cat file1 | awk 'some processing END{SHELL_VARIABLE=NR}' > file2
然后稍后在 awk 之外使用 SHELL_VARIABLE。
我不想处理文件然后wc -l
单独做一个,因为文件很大。
没有子进程可以影响父进程的环境变量。您可以做的是awk
直接将输出写入文件,然后让它打印您想要标准输出的值并捕获它。或者,如果您愿意,您可以将其反转并让 awk 将其打印到文件中,然后再将其读回。
顺便说一句,你有一个 UUOC。
rows=$(awk '{ ...; print > "file2"} END {print NR}' file1)
或者
awk '... END{print NR > "rows"}' file1 >file2
rows=$(<rows)
rm rows
一种方法:在awkEND
命令中使用重定向并在块中打印结果。并使用命令替换来读取 shell 变量中的结果:
my_var=$(awk '{ some processing; print "your output" >>file2 } END { print NR }' file1)