Ich versuche, awk
einige txt-Dateien mit diesem Code zu ändern
awk -F":" '/^title/ { o=FNR+2 } ;FNR>o { print sprintf("%-10s %-10d %-10s",FILENAME,o,$0) }' r.txt
aber es hat nicht funktioniert, bis ich die Bedingung wie folgt ersetzt habe FNR>5
.
Ich habe hier also viel versucht, aber keine Lösung gefunden. Ich habe "FNR>o"
& eingegeben FNR>$o
, aber nichts.
Also Leute, kann mir hier jemand helfen! Eingabe:
date: 22.01.2020
name : xrgsm02
title : RCV20
----------------
----------------
15 20
30 40
50 12
55 77
Ausgabe
r.txt 5 15 20
r.txt 5 30 40
r.txt 5 50 12
r.txt 5 55 77
Antwort1
Das Problem:
FNR>o
- Verwenden des
>
Operators mit einem nicht initialisierten Wert- Solange
o
es nicht initialisiert ist, hat es einen numerischen Wert von0
und einen Stringwert von der leeren Zeichenfolge - In Ihrem Skript
o
wird mit gesetzt , erscheint/^title/ { o=FNR+2 }
aber erst im dritten Datensatz. Für die ersten beiden Datensätze ist es also nicht initialisiert und wird als ausgewertet (weil & sind )/^title/
o
FNR>o
true
FNR==1
FNR==2
greater than zero
- Solange
Mögliche Lösung:
o && FNR>o
- Geben Sie an, dass
o
es ungleich Null sein muss, zusätzlich zuFNR>o
Außerdem o
ist es etwas verwirrend, da es sich um einen einbuchstabigen Variablennamen handelt. Verwenden Sie stattdessen lieber einen Buchstaben wie n
oder ein aussagekräftigeres Wort wieoutput
print sprintf("%-10s %-10d %-10s",FILENAME,o,$0)
könnte vereinfacht werden zu:
printf("%-10s %-10d %-10s\n",FILENAME,o,$0)
oder auch:
printf "%-10s %-10d %-10s\n",FILENAME,o,$0