我正在嘗試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