Сравните the first field of each line whose first field is “2000” till в different field is found

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
1
задан 7 January 2016 в 14:39

2 ответа

Из ответа Коса рева комментариев очевидно, что Вы хотите распечатать последнюю строку перед той, которая отличается. 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
2
ответ дан 3 December 2019 в 06:59

Использование 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
2
ответ дан 3 December 2019 в 06:59

Другие вопросы по тегам:

Похожие вопросы: