條件為 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

相關內容