在awk处理输入文件之前,我需要知道期望多少记录。
为了确定这一点,我在awk脚本的BEGIN段中有以下代码。...
BEGIN {
p = ""
j = 1
getline # Activates the FILENAmE variable which normally is not available in the BEGIN section of an awk script.
n = system("wc -l " FILENAME) # Assign the result (i.e. number of records in FILENAME) to the n variable.
gsub(FILENAME, "|", n) # Remove the input file name appended to the result and replace with "|" just to see what it's done!
print n # See what the hell has happened.
}
我希望看到n显示记录数,但是我的输出看起来像这样。...
12 accounts12
0
“ accounts12”是我的输入文件的名称。...
答案 0 :(得分:1)
system
返回其退出状态(如果成功完成,则通常为0)。所以这行:
n = system("wc -l " FILENAME)
只会简单地导致wc
命令的输出照常打印在屏幕上,然后将n
设置为退出代码0。
这说明:
12 accounts12
0
第一行是wc
的输出,第二行是n
的值。
您可以尝试:
BEGIN {
"wc -l " ARGV[1] | getline n;
sub(ARGV[1], "|", n);
print n;
}
这应该得到您的n
。这样做的好处是不会占用文件的第一行。
答案 1 :(得分:1)
您也可以这样做
$ awk 'NR==FNR{n=NR; next} FNR==1{print n} ...' file{,}
第一轮计算记录数,第二轮打印计数并进行其余处理。
答案 2 :(得分:0)
与AWK的另一种方法:
在字段上工作
awk -F'\ n'-vRS ='\ 0''
{
打印NF
对于(i = 1; i
打印“字段的nb =” j
}
}'infile
答案 3 :(得分:0)
鉴于输入内容,最高效,最简洁的方法始终是文件而不是流,只需在脚本外部调用wc
并在脚本内部使用其输出即可:
awk -v nr="$(wc -l < file)" '{print nr, NR, $0}' file
例如:
$ seq 3 > file
$ awk -v nr="$(wc -l < file)" '{print nr, NR, $0}' file
3 1 1
3 2 2
3 3 3