Вывести первое вхождение строки, содержащей первый символ "<", если найдена строка, содержащая первый символ ">" - PullRequest
0 голосов
/ 26 декабря 2018

Мне нужно напечатать первое вхождение каждой строки, которая начинается с «<» - только если найдена какая-либо строка, начинающаяся с символа «>».Следующее вхождение для продолжения со следующими строками.

Входной файл, как показано ниже,

Input file attached

Ожидаемый вывод, как показано ниже,

< 554033E3@rreMARS$$B$$$$$999$,YES1

< 554033E3@rreMARS$$B$$$$$999$,YES2

< 554033E3@rreMARS$$B$$$$$999$,YES3

< 554033E3@rreMARS$$B$$$$$999$,YES4

Ниже кодапопробовал, но застрял с окончательным выходом.

c=1 
cat input_file | while read l 
do d=expr $c - 1 
if [[ $l == "<"* ]]; then a=head -"$d" 
input_file|tail -1 
if [[ "$a" == "<"* ]]; 
then fc=0 
else fc=echo $c fi 
if [ "$a" == "---" ]; 
then b=head -"$fc" 
input_file|tail -1 echo $b >> FirstRecord_input_file.txt fi fc=0 fi fc=0 c=expr $c + 1 done

1 Ответ

0 голосов
/ 26 декабря 2018

cat и pipe бесполезны, вместо них можно использовать перенаправление ввода, это также позволяет избежать запуска в подоболочке.Может быть, следующий

((prevmatch=0))
while read line; do
    if [[ $line == "<"* ]]; then match=1; else match=0; fi
    ((first=match&&! prevmatch))
    ((first)) && echo "$line"
    ((prevmatch=match))
done <input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...