2016-03-21 11 views
0
#!/bin/bash 
cat $1 | awk ' /Info/, /<\/Body>/ {print $0}' | while read line; do 

    file=`awk -F '>' "{print $4}"` 

    echo "$file" 

done 

Grundsätzlich die file Eingabedatei hat einige Informationen in der ersten Zeile von awk entfernt. Nun, was ich versuche, ist eine Variable mit awk -F zu finden und zu drucken, was nach der > kommt, die das vierte Feld ist. Jetzt kann ich nicht einfach nach dem > suchen, weil die Datei 100s von ihnen hat, weil es HTML ist.So schreiben Sie awk -F Befehle

ok vielleicht kann jemand antworten, also wenn ich die Datei jetzt nicht auf das vierte Feld schaue, aber es entfernt nur alle '>' was ist nicht das Ziel, ich versuche, das Feld zu finden, das nach dem kommt 3 '>' so wäre das Feld 4, aber das ist nicht was ich bekomme? Jede Hilfe wäre großartig!

+0

Mit welchem ​​Eingang soll 'awk' arbeiten? '$ 4' wird durch die Shell erweitert, da Sie das awk-Skript in doppelte Anführungszeichen setzen. Es gibt keinen Grund, die awk-Ausgabe in einer Variablen zu erfassen, nur um sie "echo" zu machen. –

+0

es ist in einer Weile lesen Zeile; tue so im Grunde, was ich habe, ist eine Eingabe mit einer Tonne Text, den ich sortiere, also versuche ich, das vierte Feld zu nehmen, das nach dem 3. 'kommt' und das zu einer Variablen speichern und diese Variable drucken – NewEffect

+0

Tun Sie vielleicht will 'awk "/>/{print $ 4}" '. Nur eine Vermutung von deiner Frage. – Brian

Antwort

2

AWK erfordert 2 Teile

  1. Optionen
  2. Datei auf

In Ihrem Beispiel arbeiten zu können, Optionen, dh Trennzeichen gegeben haben, was zu drucken, aber Sie haben nicht die Datei erwähnt mit

Versuchen Sie, diese

    zu arbeiten
  1. Auf der Eingabeaufforderung

    cat file | awk -F ">" '{print $4}' 
    
  2. In Skript

    result=`cat file | awk -F ">" '{print $4}'` 
    echo $result 
    

Für die Textdatei als "Datei" enthält Daten als

a>b>c>d>e>f 

Sowohl die oben wird angezeigt "d".

+2

Das ist ein [nutzlosen Gebrauch der Katze] (http://porkmail.org/era/unix/ award.html # Katze). ** awk ** nimmt einen Dateinamen als Argument. Das ist in Ordnung: 'result = \ 'awk-F'> '' {print $ 4} 'file \' ' – Jeff

+0

siehe ich kann es alles nach dem 4. Feld drucken, aber ich brauche es, um das 4. Feld zu drucken, und das ist es. .. – NewEffect