我有一个如下文件......
MHDL678uhj-uik abd 678.00 ujkm ind1
cldf 1 hjkk 678 908 345
cldf 2 iuol 934 098 356
cldf 3 kloi 087 345 097
MHDL345lko-iuj mnh 345.00 jschj ind2
cldf 1 kjhk 455 898 454
cldf 2 hdjh 234 676 234
cldf 3 tyui 745 234 098
MHDL123jfk-hhg hjh 567.00 hjgh ind1
cldf 1 ghhj 566 899 678
cldf 2 fhjh 678 345 234
cldf 3 hjkf 456 345 234
MHDL432uhj-hjk fgh 345.00 hhjh ind2
cldf 1 vhjk 345 567 098
cldf 2 nmgr 234 098 123
我需要读取文件并检查指示器的特定位置" ind1 / ind2" ..如果是ind1需要复制记录(记录启动MLHD到以下行直到下一个MHDL找到ind1文件并将ind2记录复制到indicator2文件。
我尝试使用while循环读取文件,如果条件指示符检查但所有行都复制到单个文件。
以下是一些代码(从评论中复制):
while read line
do
ss=$(echo $line | cut -c-4)
ind=$(echo $line | cut -c 32-35)
if [ $ss ="MHDL" ] && [ $ind = "ind1" ]; then
echo $line>>ind1.out
# fi # -- interloper present in comment
elif [ $ss ="MHDL" ] && [ $ind = "ind2" ];then
echo $line>>ind2.out
fi
done <inputfile
答案 0 :(得分:1)
使用awk:
awk -v RS="MHDL" '{
file = /ind1/ ? "ind1.out" : "ind2.out"
printf "%s%s", RS, $0 > file
}' file