我正在尝试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==2
是greater 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