在 awk 中使用 getline 和 NR

在 awk 中使用 getline 和 NR

我有一个 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.

相关内容