Wie greppt man Zeilen, die einen bestimmten Wert in einer bestimmten Spalte haben?

Wie greppt man Zeilen, die einen bestimmten Wert in einer bestimmten Spalte haben?

Ich habe eine Datei wie die folgende

  200.000    1.353    0.086
  200.250    1.417    0.000
  200.500    1.359    0.091
  200.750    1.423    0.000
  201.000    1.365    0.093
  201.250    1.427    0.000
  201.500    1.373    0.093
  201.750    1.432    0.000
  202.000    1.383    0.091
  202.250    1.435    0.000
  202.500    1.392    0.087
  202.750    1.436    0.000
  203.000    1.402    0.081
  203.250    1.437    0.001
  203.500    1.412    0.073
  204.000    1.423    0.065
  204.500    1.432    0.055
  205.000    1.441    0.045  

Ich möchte nur die Zeilen greppen, die in der ersten Spalte nur die Dezimalzahlen .000 und .500 haben, sodass die Ausgabe wie folgt aussehen würde

  200.000    1.353    0.086
  200.500    1.359    0.091
  201.000    1.365    0.093
  201.500    1.373    0.093
  202.000    1.383    0.091
  202.500    1.392    0.087
  203.000    1.402    0.081
  203.500    1.412    0.073
  204.000    1.423    0.065
  204.500    1.432    0.055
  205.000    1.441    0.045  

Antwort1

Sie verwenden nicht grep. Verwenden Sie awk.

"your data" | awk '$1 ~ /\.[05]00/'

Antwort2

awk '$1 ~ /\.[50]00/ { print $0 }' myFile.txt

Die erste Spalte $1wird mit /\.500|\.000/den Punkten verglichen, die als wörtliche Punkte maskiert werden, nicht mit regulären Ausdrücken, die nur ~teilweise übereinstimmen, und die ganze Zeile wird gedruckt$0

Antwort3

Ich möchtegrepnur die Zeilen, die in der ersten Spalte die Dezimalzahlen .000 und .500 haben

Mein erster Gedanke

grep '^ *[0-9][0-9][0-9]\.[50]00' filename

Schnelltest mit WSL

$ head testdata
              200.000    1.353    0.086
              200.250    1.417    0.000
              200.500    1.359    0.091
              200.750    1.423    0.000
              201.000    1.365    0.093
              201.250    1.427    0.000
              201.500    1.373    0.093
              201.750    1.432    0.000
              202.000    1.383    0.091
              202.250    1.435    0.000
$ grep '^ *[0-9][0-9][0-9]\.[50]00' testdata
              200.000    1.353    0.086
              200.500    1.359    0.091
              201.000    1.365    0.093
              201.500    1.373    0.093
              202.000    1.383    0.091
              202.500    1.392    0.087
              203.000    1.402    0.081
              203.500    1.412    0.073
              204.000    1.423    0.065
              204.500    1.432    0.055
              205.000    1.441    0.045

Es gibt prägnantere Möglichkeiten, dies auszudrücken.

$ grep -E '^ *[0-9]{3}\.[50]00' testdata
              200.000    1.353    0.086
              200.500    1.359    0.091
              201.000    1.365    0.093
              201.500    1.373    0.093
              202.000    1.383    0.091
              202.500    1.392    0.087
              203.000    1.402    0.081
              203.500    1.412    0.073
              204.000    1.423    0.065
              204.500    1.432    0.055
              205.000    1.441    0.045

Wenn die erste Spalte einen anderen als einen dreistelligen ganzzahligen Teil enthalten kann

grep -E '^ *[0-9]+\.[05]00' testdata

Unter bestimmten Umständen müssen Sie [:digit:]anstelle von verwenden [0-9].

Und so weiter.

man grepist dein Freund.

Antwort4

 grep -e '2[^ ]*.000' -e '2[^ ]*.500' file.txt

verwandte Informationen