Как печатать содержимое с помощью AWK в определенной строке

Ответ — удалить let g:solarized_termcolors=256, так как это сообщит vim о необходимости использовать ухудшенные цвета (, см.https://github.com/altercation/vim-colors-solarized#important-note-for-terminal-users)

1
08.06.2021, 07:35
3 ответа

для печати обеих строк (строки выше и найденной строки)

grep -B1 clientside file

где

  • -B1 означает до 1, используйте -B5 для печати 5 строк перед

для печати только строки перед (не значит, что у вас есть только одна строка, даже если clientsideвстречается дважды)

grep -B1 clientside file | head -1

Во всех случаях используйте инвертированный grep для удаления совпадающих строк и grepгрупповых разделителей:

grep -B1 'clientside' file | grep -v '^--$\|clientside'
2
28.07.2021, 11:26

Использованиеawk:

$ awk '/clientside/ {if (a && a !~ /clientside/) print a} {a=$0}' file
/Partition/SSL_profile

Использованиеsed:

$ sed -n -e '/clientside/ {x;p;d;}' -e x file 
/Partition/SSL_profile

или POSIXly:

$ sed -n '/clientside/{g
1!p
}
h
' file
/Partition/SSL_profile
1
28.07.2021, 11:26

Использованиеawk:

Будет напечатана предыдущая запись, в которой совпало clientside. Вторая команда печатает номер записи и предыдущую запись.

awk '/clientside/{ print prev;};{prev=$0}' file
awk '/clientside/{ printf "%s: %s\n", (NR-1), prev};{prev=$0}' file

Они будут печатать предыдущую запись, а также текущую входную запись($0).

awk '/clientside/{ print prev; print $0};{prev=$0}' file
awk '/clientside/{ printf "%s: %s\n%s: %s\n", (NR-1), prev,NR,$0};{prev=$0}' file

При совпадении clientsideпечатается предыдущая запись, сохраненная в переменной prev, а затем печатается текущая входная запись ($0).

Но эта команда напечатает повторяющиеся строки.

$ cat file
/Partition/SSL_profile
context1 clientside 
context2 clientside
context3 clientside

Здесь приведенная выше команда дает следующий результат:

awk '/clientside/{ print prev; print $0};{prev=$0}' file
/Partition/SSL_profile
context1 clientside 
context1 clientside 
context2 clientside
context2 clientside
context3 clientside

Поэтому команду следует изменить на это, чтобы избежать дублирования строк.

 awk '/clientside/{ if(line!=prev_lineno) print prev; print $0; line=NR};
{prev=$0;prev_lineno=NR}' file
4
28.07.2021, 11:26

Теги

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