2

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

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

然后稍后在 awk 之外使用 SHELL_VARIABLE。

我不想处理文件然后wc -l单独做一个,因为文件很大。

4

2 回答 2

3

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

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

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

或者

awk '... END{print NR > "rows"}' file1 >file2
rows=$(<rows)
rm rows
于 2013-08-10T19:51:19.443 回答
3

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

my_var=$(awk '{ some processing; print "your output" >>file2 } END { print NR }' file1)
于 2013-08-10T19:47:34.487 回答