Die awk
unten funktioniert gut für input1
(wenn alle erforderlichen Feld vorhanden sind und Werte haben). Die Exception
fied wird entsprechend den if
Aussagen in der awk
aktualisiert. Es ist nicht für input2
oder input3
(wo alle erforderlichen Felder vorhanden sind, aber die Werte nicht erwartet werden). Die einzigen zwei Felder, die keinen numerischen Wert in ihnen haben können, sind Barcode2
und Barcode3
. Die meiste Zeit werden sie, aber wenn sie nicht anwesend sind, ist das Wort missing
der Wert. Meine Frage ist, wenn eines dieser beiden Felder oder eines von ihnen missing
ist, dann kann dieses Feld übersprungen oder nicht in den if
Anweisungen verwendet werden. Ich bin mir nicht sicher, wie oder wo ich das machen soll. Vielen Dank :).awk Feld basierend auf if-Anweisungen zu aktualisieren, außer wenn Schlüsselwort im Feld ist
Eingangtab-delimited
--- Barcode2 und Barcode3 "fehlen"
Barcode1 Barcode2 Barcode3 NoBarcode Exception
38774136 missing missing 0.89
Skript
awk '
BEGIN { # Set input and output field separator:
FS = OFS = "\t"
}
NR == 1 {# Search line 1 of file
# Create array to tranlate needed field headers to field numbers:
for(i = 1; i <= NF; i++) {
f[$i] = i
}
next
}
{
if($f["Barcode1"] < 20000000 ||
$f["Barcode2"] < 2000000 ||
$f["Barcode3"] < 2000000) {
$f["Exception"] = "Failure due to low barcode reads"
}
else {
$f["Exception"] = "Pass"
}
print
}
' input
Stromausgang für die Eingabetab-delimited
sollte Pass in Ausnahme sein, da die fehlende Felder werden nicht verwendet
Barcode1 Barcode2 Barcode3 NoBarcode Exception
38774136 missing missing 0.89 Failure due to low barcode reads
gewünschten Ausgang für die Eingabetab-delimited
Pass in Ausnahme als die fehlenden Felder sollten nicht verwendet werden
Barcode1 Barcode2 Barcode3 NoBarcode Exception
38774136 missing missing 0.89 Pass
Bitte bearbeiten Sie Ihr Q, um Ihren aktuellen Ausgang sowie die erforderliche Ausgabe von Ihren Beispieleingängen anzuzeigen. Verbale Beschreibungen führen fast immer zu "oh, und ich meinte X1, nicht X" Kette von Diskussionen in Kommentaren. Viel Glück. – shellter
Ich habe die aktuelle Ausgabe zum Beitrag hinzugefügt. Vielen Dank :). – Chris
du kommst dahin. Ich sehe 2 Sätze "Stromausgang für Eingang 2/3", ich möchte nicht raten, welches die gewünschte Ausgabe ist. Bitte aktualisiere dein Q. Außerdem scheint es, als ob dein Problem mit '&&' ed konditionaler Logik zusammenhängt, welche Pattern-Matching-Blöcke wie 'NR> 1 {...}' nicht so hilfreich sind. Kennen Sie das allgemeinere Konstrukt, das alle Zeilen verarbeitet, zB.e 'awk -F, {if (cond1 && cond2 && .... || altCond ....) {do square} sonst if (cond7 && cond8) {anderes Zeug}} else {mehr Zeug}} 'Datei'? Viel Glück. – shellter