Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在读取文件时Shellscript并将记录复制到文件中_Shell_Unix - Fatal编程技术网

在读取文件时Shellscript并将记录复制到文件中

在读取文件时Shellscript并将记录复制到文件中,shell,unix,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 4

我有一个文件如下

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记录复制到指示器2文件

我曾尝试使用while循环读取文件和if条件以进行指示符检查,但所有行都复制到一个文件中

以下是一些代码(从注释中复制):

读取行时
做
ss=$(回声$线|切割-c-4)
ind=$(回声$线|切割-c 32-35)
如果[$ss=“MHDL”]&&[$ind=“ind1”];然后
echo$line>>ind1.out
#fi#——评论中出现的闯入者
elif[$ss=“MHDL”]&&[$ind=“ind2”];然后
echo$line>>ind2.out
fi
完成使用awk:

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

发布您的代码,并提供上述输入的预期输出。请将代码发布到您的评论编辑中。我是为你做的。另外,请张贴工作代码;您粘贴的内容中有多余的
fi
。如果要保留间距,请在每次编写时在“$line”
周围加上双引号。如果不这样做,将严重破坏决定
$ind
值的代码。您是否使用
bash-x yourscript.sh运行脚本?若否,原因为何?您的代码没有设置回显未启动的行
MHDL
,因此无法获得正确的输出。
awk -v RS="MHDL" '{
    file = /ind1/ ? "ind1.out" : "ind2.out"
    printf "%s%s", RS, $0 > file
}' file