在读取文件时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