Ограничитель конца встроенного блока (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
Используйте 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
Другоеawkрешение:
awk 'NR>1 && a && substr($1,1,1)!=a{ print "" }{ a=substr($1,1,1) }1' file
substr($1,1,1)
- извлечь 1-й символ из 1-го поляМы накапливаем следующую строку в пространстве шаблонов и сравниваем первый символ пространство шаблонов с первым символом последней строки в пространстве шаблонов.
При совпадении мы добавляем еще одну строку в пространство шаблона. Теперь, если мы нажмем 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