Shell脚本读取文件并将记录复制到文件中

时间:2014-01-03 01:05:22

标签: shell unix

我有一个如下文件......

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

1 个答案:

答案 0 :(得分:1)

使用awk:

awk -v RS="MHDL" '{
    file = /ind1/ ? "ind1.out" : "ind2.out"
    printf "%s%s", RS, $0 > file
}' file