Grep für ein bestimmtes Element

Grep für ein bestimmtes Element

Ich stecke in einer verzwickten Situation fest. Ich habe eine Datei, deren Inhalt so aussieht:

3               2017-05-30      2017-09-29
2               2017-05-27      2017-08-26
1               2017-05-27      2017-08-26

Jetzt kann der Benutzer ein Datum ändern, indem er „labelNum“ auswählt. Dabei handelt es sich um die Werte in Spalte 1. Wenn der Benutzer bei der Eingabeaufforderung „3“ eingibt, möchte er Spalte 2 drucken.

Also habe ich geschrieben.

cat temp.txt | grep $labelNum | awk '{print $2}'

Wenn labelNum3 ist, erhalte ich die Ausgabe als2017-05-30

Wenn der Benutzer jedoch labelNum2 eingibt, erhalte ich:

2017-05-30
2017-05-27
2017-05-27

Weil es überall in der .txt-Datei nach '2' sucht. Ich möchte jedoch die Spalte 2 für labelNum2, was wäre2017-05-27

Gibt es eine Möglichkeit, dies zu tun? Ich habe versucht, grep durch awk zu ersetzen, aber ohne Erfolg.

Danke.

Bearbeiten: Die Zeilen sind dynamisch und können sich ändern, wenn weitere Einträge zur Textdatei hinzugefügt werden. Daher kann sed nicht wirklich verwendet werden, um zur Zeile zu springen

Antwort1

Mit Einzelawk:

awk -v lbl=$labelNum '$1 == lbl{ print $2 }' temp.txt

  • -v lbl=$labelNum- Übergabe des labelNumVariablenwerts an ein Awk-Skript

  • $1 == lbl- wenn der Wert der 1. Spalte gleich dem Variablenwert ist - führt den folgenden Ausdruck aus

Antwort2

Sie können auch bei Ihrer Lösung bleiben:

cat temp.txt | grep ^$labelNum | awk '{print $2}'

Welches passt am Anfang der Zeile, oder

awk '/^'$labelNum'/{print $2}' temp.txt

Würde genauso funktionieren, aber das Entkommen ist innerhalb von awk schwierig.

verwandte Informationen