2017-06-10 4 views
0

Wenn ich einen Wert von 64.512 bis 65.535 im letzten Feld zu finden, dann wird die ganze Zeile entfernt werden:ganze Linie basierend Wert des letzten Feldes entfernen

Daten

Beispiel:

20170101|1.0.136.0/24|2497 38040 28969 
20170101|1.0.137.0/24|2497 38040 33423 
20170101|1.0.138.0/24|2497 38040 64603 
20170101|1.0.139.0/24|2497 38040 10136 
20170101|1.0.142.0/24|2497 38040 65222 
20170101|1.0.144.0/24|2497 38040 65535 

Erwartete Ausgabe :

20170101|1.0.136.0/24|2497 38040 28969 
20170101|1.0.137.0/24|2497 38040 33423 
20170101|1.0.139.0/24|2497 38040 10136 

Gibt es eine Möglichkeit, es zu tun?

+0

Ja, es gibt viele Möglichkeiten, es zu tun. Was hast du probiert? –

Antwort

0

Es ist nicht klar, was Sie mit dem "letzten Feld" meinen. Sind diese Daten durch | begrenzt, wobei das letzte Feld in der ersten Zeile die Zeichenfolge 2497 38040 28969 ist? Oder ist der Text durch Leerzeichen begrenzt und das letzte Feld ist nur 28969? Letzteres ist viel einfacher zu tun:

awk '$NF<64512 || $NF > 65535' input-file 

Wenn der ehemalige, müssen Sie ein bisschen härter arbeiten.

+0

Es funktioniert für mich, ich meinte den Text durch Leerzeichen begrenzt, danke. – user8108049

0

versuchen: Wenn Sie die gleiche Input_file wie Beispiel gezeigt haben, dann helfen Ihnen auch folgende in der gleichen.

while read a b c 
do 
    if [[ $c > 64512 && $c < 65535 ]] 
    then 
     echo $a $b $c 
    fi 
done < "Input_file" 
0
awk ' $4 < 64512 && $4 > 65535 ' sample.txt 

$ 4 - vierte Feld, das größer ist als 64512 überprüft werden muss und weniger als 65535, nicht diese Zeilen zu drucken ..

0
awk '$3<33424' file 

20170101|1.0.136.0/24|2497 38040 28969 
20170101|1.0.137.0/24|2497 38040 33423 
20170101|1.0.139.0/24|2497 38040 10136 
+0

Während dieser Code die Frage beantworten kann, würde das Bereitstellen eines zusätzlichen Kontextes, wie und/oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern. – Badacadabra

Verwandte Themen