Как создать уникальную строку awk и напечатать на 2 строки выше

Вы пытались удалить его принудительно? Попробуйте этот вариант, если ваше имя файла верное:

rm -rf file.to.delete
1
27.06.2017, 16:08
2 ответа
sed -e '
   1N                                  # get 2nd line in pattern space
   $!N                                 # get 3rd line in pattern space
   /\ncreate table "sacro"\.issue$/P   # if the last portion of matches, show 1st portion
   D                                   # strip 1st portion & reapply sed code on what
                                       # remains of the pattern space
' test.txt

grep -B 2 'create table "sacro"\.issue$' test.txt | sed q
1
27.01.2020, 23:45

Во-первых, нет причин, по которым grepнельзя это сделать. Да, и обратите внимание, что catвам не нужен, как grep, так и awkмогут принимать имена входных файлов:

$ grep -xB2 'create table "sacro".issue' file
{ unload file name = issue00106.unl number of rows = 74 }

create table "sacro".issue

Итак, если вам нужна только первая строка, сделайте:

$ grep -xB2 'create table "sacro".issue' file | head -n1
{ unload file name = issue00106.unl number of rows = 74 }

-xозначает «совпадение со всей строкой», что гарантирует, что строка create table "sacro".issue_categoryне будет напечатана. -B2означает «распечатать также 2 предыдущие строки».


Вы также можете сделать это в awkпо запросу:

$ awk -vs='create table "sacro".issue' '($0==s){print b2}{b2=b1; b1=$0}' file 
{ unload file name = issue00106.unl number of rows = 74 }
0
27.01.2020, 23:45

Теги

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