从 Unix 文件中获取和替换数据

从 Unix 文件中获取和替换数据

我有一个文件,其中单行数据为

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 个字符开始。

相关内容