Вставка пустой строки после изменения первого алфавита с помощью awk

Ограничитель конца встроенного блока (EOF в вашем случае) должен быть единственной строкой в ​​строке. И ваш скрипт должен быть переписан следующим образом:

testabcd=$(bteq <<EOF |grep '^>' |sed -e "s/^>//"
.LOGON TDPROD/userid,pass;

select top 3  '>'||t.cal_dt from rldmprod_v.cal_dt t where t.cal_dt =   current_date;

.LOGOFF;
.QUIT;
EOF
)
var=$testabcd
echo $var
0
28.06.2017, 16:32
4 ответа

Используйте awk, чтобы выбрать первый символ текущей строки ввода. Если он отличается от первого символа предыдущей строки, выведите пустую строку. Запомните первый символ этой строки и затем выведите текущую строку. Таким образом, перед каждой строкой выводится пустая строка, если первый символ отличается от того, что был в предыдущей строке.

$ awk '{ cur = substr($0,1,1) } NR > 1 && cur != prev { print "" } { prev = cur; print }' file
Anand Anju
Anand Sanjay

Das Ajay
Deshpande Shweta

Kanetkar Ashok
Kanetkar Jyoti

Sabane Dhananjay
Sahani Surinder
3
28.01.2020, 02:16

Другоеawkрешение:

awk 'NR>1 && a && substr($1,1,1)!=a{ print "" }{ a=substr($1,1,1) }1' file

  • substr($1,1,1)- извлечь 1-й символ из 1-го поля
1
28.01.2020, 02:16
awk '{A[$1]++;if(A[$1]==1){printf("\n")}}1' FS= file
1
28.01.2020, 02:16

Мы накапливаем следующую строку в пространстве шаблонов и сравниваем первый символ пространство шаблонов с первым символом последней строки в пространстве шаблонов.

При совпадении мы добавляем еще одну строку в пространство шаблона. Теперь, если мы нажмем eof, мы немедленно выйдем из команды (N), поэтому мы не ставим перед ней префикс $! , чтобы воспользоваться этой функцией.

В противном случае мы помещаем новую строку в конце блока.

Предполагается, что GNU sed.

sed -e '
   :a;N
   /^\(.\).*\n\1[^\n]*$/ba
   h;s/\(.*\n\).*/\1/p
   g;s/.*\(\n\)/\1/;D
' file.txt

Результаты

Anand Anju
Anand Sanjay

Das Ajay
Deshpande Shweta

Kanetkar Ashok
Kanetkar Jyoti

Sabane Dhananjay
Sahani Surinder
0
28.01.2020, 02:16

Теги

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