条件为 NR > var 的 awk 打印命令

条件为 NR > var 的 awk 打印命令

我正在尝试awk使用此代码修改一些txt文件

awk -F":" '/^title/ { o=FNR+2 } ;FNR>o { print sprintf("%-10s %-10d %-10s",FILENAME,o,$0) }' r.txt

但直到我将条件替换为 this 后它才起作用FNR>5

所以在这里尝试了很多,但没有找到解决方案。我放了"FNR>o"&FNR>$o但什么也没放。

所以大家可以在这里帮助我!输入 :

date: 22.01.2020
name : xrgsm02
title : RCV20
----------------
----------------
15   20
30   40
50   12
55   77

输出

r.txt   5  15   20
r.txt   5  30   40
r.txt   5  50   12
r.txt   5  55   77

答案1

问题:

FNR>o
  • 使用>具有未初始化值的运算符
    • 虽然o未初始化,但它的数值为0,字符串值为空字符串
    • 在您的脚本中,o设置为/^title/ { o=FNR+2 },但/^title/直到第三条记录才出现。因此,前两条记录o未初始化并且FNR>o计算结果为true(因为FNR==1&FNR==2greater than zero

可能的解决方案:

o && FNR>o
  • 指定o必须非零,此外FNR>o

另外,o作为单字母变量名有点令人困惑 - 考虑使用字母 liken或更具描述性的单词 likeoutput代替


print sprintf("%-10s %-10d %-10s",FILENAME,o,$0)

可以简化为:

printf("%-10s %-10d %-10s\n",FILENAME,o,$0)

甚至:

printf "%-10s %-10d %-10s\n",FILENAME,o,$0

相关内容