My goal is to сравнил the first field of each line whose first field is "2000" till I find в different field.
Let say the different field is located in line number 6, эксперт in the provided example; in that жените гd ask Bash to print line number 5, which is the line before the line "не Ливинг Леавес":
2000 255 17. 11. 0. 30. 0.05 97. 0.110 6.7 6.7 596. 0.03 0.27 0 0
2000 256 17. 11. 0. 30. 0.05 97. 0.109 6.7 6.7 596. 0.03 0.22 0 0
2000 257 17. 11. 0. 30. 0.05 97. 0.109 6.7 6.7 596. 0.02 0.20 0 0
2000 258 17. 11. 0. 30. 0.05 97. 0.109 6.7 6.7 596. 0.02 0.16 0 0
2000 259 17. 11. 0. 30. 0.05 97. 0.109 6.6 6.6 596. 0.02 0.18 0 0
No Living leaves
Из ответа Коса рева комментариев очевидно, что Вы хотите распечатать последнюю строку перед той, которая отличается. AWK
подход был бы следующим.
$ awk ' $1==2000{line=$0} $1!=2000{exit}END{print line} ' OmarAli.txt
2000 259 17. 11. 0. 30. 0.05 97. 0.109 6.6 6.6 596. 0.02 0.18 0 0
bash
путь был бы похож так:
$ while read LINE; do if [ "${LINE:0:4}" != "2000" ];then print $PREV; break; fi; PREV=$LINE; done < OmarAli.txt
2000 259 17. 11. 0. 30. 0.05 97. 0.109 6.6 6.6 596. 0.02 0.18 0 0
Использование Perl:
perl -lane 'if($F[0]!=2000){print $x;exit}else{$x=$_}' in
Сохранить результат в переменную:
var=$(perl -lane 'if($F[0]!=2000){print $x;exit}else{$x=$_}' in)
if($F[0]!=2000){print $x;exit}
: если первое поле не 2000
печатает содержание $x
и выходы;else{$x=$_}
: если первое поле 2000
присваивает текущую запись на $x
.Это ничего не распечатает, если первое поле первой записи не будет 2000
и последняя запись, первое поле которой 2000
иначе.
% cat in
2000 255 17. 11. 0. 30. 0.05 97. 0.110 6.7 6.7 596. 0.03 0.27 0 0
2000 256 17. 11. 0. 30. 0.05 97. 0.109 6.7 6.7 596. 0.03 0.22 0 0
2000 257 17. 11. 0. 30. 0.05 97. 0.109 6.7 6.7 596. 0.02 0.20 0 0
2000 258 17. 11. 0. 30. 0.05 97. 0.109 6.7 6.7 596. 0.02 0.16 0 0
2000 259 17. 11. 0. 30. 0.05 97. 0.109 6.6 6.6 596. 0.02 0.18 0 0
No Living leaves
% perl -lane 'if($F[0]!=2000){print $x;exit}else{$x=$_}' in
2000 259 17. 11. 0. 30. 0.05 97. 0.109 6.6 6.6 596. 0.02 0.18 0 0
% var=$(perl -lane 'if($F[0]!=2000){print $x;exit}else{$x=$_}' in)
% echo $var
2000 259 17. 11. 0. 30. 0.05 97. 0.109 6.6 6.6 596. 0.02 0.18 0 0