Ich versuche, das genaue Feld des nächsten Datensatzes nach einer Übereinstimmung zu erhalten, zum Beispiel, wenn "string1" in $ 2 übereinstimmt, dann muss ich den Wert erhalten von $ 2 des nächsten Datensatzes. Ich habe etwa 100 solcher Strings, die genau einmal in einer Eingabedatei vorkommen. aber die gleiche Suchzeichenfolge kann in einer anderen Eingabedatei vorhanden sein (ich habe mehr als 1000 solcher Eingabedateien).das gleiche Feld des nächsten Datensatzes nach einem Spiel in awk
Abtastwerteingang: Komma getrennt
10.217.250.162,NTTN_EMS,Radio/AMR Configuration Slot02,
RX RF Frequency Slot02,Channel Spacing Slot02,AMR Range (QPSK) Slot02,AMR Range (16QAM) Slot02
37740.500 [MHz],7 [MHz],Enable,Enable
10.217.250.162,NTTN_EMS,Radio/AMR Configuration Slot03,
RX RF Frequency (Slot03),Channel Spacing (Slot03),AMR Range (QPSK) {(Slot03)|(SW GRP2)},AMR Range (16QAM) {(Slot03)|(SW GRP2)}
37712.500 [MHz],7 [MHz],Enable,Enable
10.217.250.162,NTTN_EMS,Radio/AMR Configuration Slot04,
RX RF Frequency Slot04,Channel Spacing Slot04,AMR Range (QPSK) Slot04,AMR Range (16QAM) Slot04
,,,
10.217.250.162,NTTN_EMS,Radio/AMR Configuration Slot05,
RX RF Frequency (Slot05),Channel Spacing (Slot05),AMR Range (QPSK) {(Slot05)|(SW GRP3)},AMR Range (16QAM) {(Slot05)|(SW GRP3)}
string1, string2 .... sind Suchmuster enthält alphanumerische mit ({| zwischen Wertfelder können leer sein Anzahl der Felder nicht festgelegt ist... die Lage von string1 ist nicht festgelegt, in anderer Position auftreten kann aber nur einmal in einer Datei auftritt
, was ich bisher versucht:..
BEGIN {
FS=OFS=","
}
{for (i=1;i<=NF;i++){
if ($i == "string1"){
getline val;
split(val,a,",");
am1=a[i]}
if ($i == "string2"){
getline val;
split(val,a,",");
am2=a[i]}
}
}
END {print am1,am2}
ich weiß, dass dies nicht für die angegebene Eingabe funktioniert, da die i für aufeinanderfolgende value1 und value2 geändert wird. Sollte ich für jede einzelne Suchzeichenfolge eine andere for-Schleife verwenden? oder schlagen Sie bitte eine Lösung vor.
Such
string1="AMR Range (QPSK) Slot02",string2="AMR Range (QPSK) {(Slot03)|(SW GRP2)}",string3="AMR Range (QPSK) Slot04",string4="AMR Range (16QAM) Slot02"
gewünschte Ausgabe:
10.217.250.162,NTTN_EMS,Enable,Enable,,Enable
Wo ist deine andere Eingabedatei, wie es aussieht und was heißt das? –
Bearbeiten Sie Ihre Frage, um eine [mcve] mit prägnanten, testbaren Beispiel-Eingabe (beide Eingabedateien und ersetzen Sie alle 'blah' ',' String 'und 'Wert mit sinnvollen repräsentativen Werte) und die erwartete Ausgabe gegeben diese Eingabe. Wenn Sie jemals in Erwägung ziehen, 'getline' zu verwenden, lesen Sie zuerst alle Implikationen und Vorbehalte vollständig und verstehen Sie unter http://awk.freeshell.org/AllAboutGetline. –
@MarkSetchell andere Eingabedateien haben dasselbe Format, nur die Suchzeichenfolgenpositionen sind anders. – foxx