如果找到具有“>”第一个字符的行,则打印第一个出现的具有“ <”第一个字符的行

时间:2018-12-26 07:20:03

标签: linux bash shell

我需要打印每行的第一次出现,该行以“ <”开头-仅当找到以“>”开头的任何行时。 下次出现时继续下一行。

输入文件如下,

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 :(得分:0)

cat和pipe没用,可以使用输入重定向来代替,这也避免了在subshel​​l中运行while。 也许会这么做

((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