2016-04-19 8 views
1

Ich habe mein Skript, das maximalen Wert von 3 Spalten der ausgewählten Datei erhält. Wenn die Datei rein ist, funktioniert es gut, aber wenn ich versuche, die Datei mit Tail + 2 zu pipen, funktioniert es einfach nicht mehr. Es gibt Code:awk Skript funktioniert auf reine Datei, aber nicht mit Schwanz arbeiten + 2

BEGIN {max1 = 0; max2 = 0; max3 = 0} 
{ 
if(max1 < $1) 
max1 = $1 
if(max2 < $2) 
max2 = $2 
if(max3 < $3) 
max3 = $3 
} 
END {print max1, max2, max3;} 

i Code wie folgt aus: awk -f [codefilename] [target]

funktioniert 100% gut

i Ausführen von Code wie folgt aus (wollen erste Zeile entfernen, bevor Zählen):

awk -f [Codedateiname] [Zieldatei] | Schwanz + 2

es nicht

Danke für Ihre Hilfe und Zeit.

+2

Ich denke du willst: 'tail +2 targetfile | awk -f Codedateiname – andlrc

+0

Vielen Dank, es hat funktioniert! Ich bin immer noch ziemlich grün auf diesem: D –

+0

Wenn Sie verwendet werden, um den Dateinamen am Ende zu setzen, können Sie dies auch 'awk ... <(Tail +2 Datei)' – karakfa

Antwort

1

Betrachten Sie Ihr Beispiel:

awk -f codefilename targetfile | tail+2 

allererst Sie ein Leerzeichen zwischen tail und +2 benötigen. Zweitens, was passiert ist, dass die Ausgabe von dem awk Befehl tail geleitet wird, um sein im Grunde wie das Schreiben:

awk -f codefilename targetfile > tmp1 
tail +2 tmp1 

Was ich denke, Sie wollen, ist von targetfile alle, aber der ersten Zeile zu nehmen und Ihren awk Code ausführen auf es, wenn das der Fall ist Sie brauchen:

tail +2 targetfile | awk -f codefilename 

Afaik tail +N wird nicht von allen Distributionen unterstützt, und Sie würden stattdessen so etwas wie sed -n '2,$p' brauchen. Wenn jemand klären kann, bitte.

+0

Ich benutze SunOS 5.11, also unterstützt es + N gerade fein: D. Danke für Infos nochmal. ps ja Leerzeichen zwischen Tail und +2 ist Syntaxfehler, mein schlechtes. –

+0

Und natürlich brauchst du das "tail + 2" überhaupt nicht, awk ist perfekt in der Lage Linien zu überspringen: 'NR> 1 {... code ...}'. @PauliusMickus btw ist deine max-Berechnung im allgemeinen falsch - Seed mit dem ersten gelesenen Wert, gehe nicht davon aus, dass es einen Wert größer als Null geben wird. –

+0

@Ed Mordon ty krank, das funktioniert nur mit positiven Zahlen. –

Verwandte Themen