GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Nehmen Sie die n-te Spalte in einer Textdatei

iirc :

cat filename.txt | awk '{ print $2 $4 }'

oder, wie in den Kommentaren erwähnt:

awk '{ print $2 $4 }' filename.txt

Sie können den cut verwenden Befehl:

cut -d' ' -f3,5 < datafile.txt

druckt

1657 19.6117
1410 18.8302
3078 18.6695
2434 14.0508
3129 13.5495

die

  • -d' ' - Mittel, verwenden Sie space als Trennzeichen
  • -f3,5 - 3. und 5. Spalte nehmen und drucken

Die cut ist viel schneller für große Dateien als reine Shell-Lösung. Wenn Ihre Datei durch mehrere Leerzeichen getrennt ist, können Sie diese zuerst entfernen, wie zum Beispiel:

sed 's/[\t ][\t ]*/ /g' < datafile.txt | cut -d' ' -f3,5

wobei der (gnu) sed jeden tab ersetzt oder space Zeichen mit einem einzigen space .

Für eine Variante - hier ist auch eine Perl-Lösung:

perl -lanE 'say "$F[2] $F[4]"' < datafile.txt

Der Vollständigkeit halber:

while read -r _ _ one _ two _; do
    echo "$one $two"
done < file.txt

Statt _ eine beliebige Variable (wie junk ) können ebenfalls verwendet werden. Es geht nur darum, die Spalten zu extrahieren.

Demo:

$ while read -r _ _ one _ two _; do echo "$one $two"; done < /tmp/file.txt
1657 19.6117
1410 18.8302
3078 18.6695
2434 14.0508
3129 13.5495

Linux
  1. Benennen Sie eine Datei im Linux-Terminal um

  2. So fügen Sie unter Linux Text an das Dateiende an

  3. So fügen Sie Textdateien unter Linux Zeilennummern hinzu

  4. Bash-Skript:Prüfen, ob eine Datei eine Textdatei ist?

  5. Text an das Ende einer Textdatei anhängen?

Wie finde ich Zeilenenden in einer Textdatei heraus?

Wie verwende ich den Linux-Befehl Sort, um die Textdatei nach der vierten Spalte in numerischer Reihenfolge zu sortieren?

In .txt-Datei schreiben?

Wie speichere ich die Ausgabe dieses awk-Befehls in einer Datei?

Wie füge ich Text an eine Datei an?

ersetzt das n-te Vorkommen von String in jeder Zeile einer Textdatei