我有一个文件,其中单行数据为
DL2016-12-02高级 PW5038 X800901180118 59036CO00400010180421 0755480 健康 B 不适用 不适用 2016-08-012016-12-022016-09-012016-08-312016- 09-302016-09-012016-09-30949569014 PW5018 07554800010001089200001 00100010892 00000010304MDIRECT 00000000000000000000{ HPS PW5018COCOAA007708200000010304DXQ7262016001
我正在尝试获取这种格式的数据0000001030.4M 00000000000.0{
我使用的命令是cut -c 385-396,415-427 Filename|sed 's/./&./10'|sed 's/./& /13'|sed 's/./&./25'
请让我知道完成此任务的简单方法。我必须这样做才能完成具有任意行数的文件。
我将通过使用获取数据
awk '{print substr($0,385,10)"."substr($0,395,2)" "substr($0,415,11)"."substr($0,426,2)}' 文件名
现在我正在寻找另一件事。我想分别替换0000001030.4M 00000000000.0{
M and {
为-1 and 5
。这应该看起来像-0000001030.41 00000000000.05
。
答案1
对于您非常具体的要求,您的示例代码已经非常接近最简单的了。您可以将三个单独的sed
命令合并为一个命令:
cut -c 385-396,415-427 Filename | sed 's/./&./10;s/./& /13;s/./&./25'
或者,您可以使用任何支持子字符串的语言/工具。例如,awk
:
awk '{print substr($0,385,10)"."substr($0,395,2)" "substr($0,415,11)"."substr($0,426,2)}' Filename
来自GNU Awk 用户指南:
substr(string, start [, length ])
返回 string 的一个 length 个字符长的子字符串,从第 start 个字符开始。