我有一个 bash 脚本,它调用 awk 脚本来打印文件 name_list.txt 中的每一行
#!/bin/bash
awk -f parse_list.awk name_list.txt
在 awk 脚本中,我使用 getline 和 NR 来打印每条记录,如下所示:
#!/usr/bin/awk
BEGIN {
line = ""
}
NR != 0 {
print NR
getline line
print line
}
假设name_list.txt如下所示:
aaaaaaaaaaa
bbbbbbbbbb
cccccccccc
ddddddddddd
eeeeeeeee
ffffffffff
gggggggg
当我执行此脚本时,我期望将 name_list.txt 的内容以及行号打印在控制台上,但是当我执行它时, getline 和/或 print 会跳过一行,因此输出始终是。
1
bbbbbbbbbb
3
ddddddddddd
5
ffffffffff
7
ffffffffff
谁能告诉我我是否正确使用 NR 和 getline。我需要 shell 脚本和 awk 脚本,我不想将它们组合起来。有人可以帮忙吗?
答案1
getline
读入下一个线。你不需要使用它。当前行已经位于$0
:
awk '{print NR, $0}' name_list.txt
答案2
getline 获取下一行输入。从手册页来看——
getline var Set var from next input record; set NR, FNR.