我需要打印每行的第一次出现,该行以“ <”开头-仅当找到以“>”开头的任何行时。 下次出现时继续下一行。
输入文件如下,
预期输出如下,
< 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
答案 0 :(得分:0)
cat和pipe没用,可以使用输入重定向来代替,这也避免了在subshell中运行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