3

我有一个文本文件,我想在某些字符之后放置分隔符(修复),。like 在1-3字符之后放置一个分隔符(任何类似 ,)456-17 .....

文件看起来像这样(原始)

22503003673916972040504700538884720121008175657358045042677480191000000919046068826

我想要这样的文件

225,0,3,003673916972,0405047005388847,20121008175657,3580450426774801,91,000000919046068826,

请建议任何可以完成这项工作的命令或脚本?

提前致谢

4

3 回答 3

2

我会使用python:

#!/usr/bin/env python

a='22503003673916972040504700538884720121008175657358045042677480191000000919046068826'

# python strings are 0-indexed, just
# add the indexes below
delim=[2, 3, 4, 16]
A=""

for n, i in enumerate(a):
    if n in delim:
        A+='%s,' % i
    else:
        A+=i

print A

输出:

$ ./delim.py 
225,0,3,003673916972,040504700538884720121008175657358045042677480191000000919046068826

它也可以使用列表推导式写得非常简洁:

>>> "".join([i+',' if n in delim else i for n, i in enumerate(a)])
'225,0,3,003673916972,040504700538884720121008175657358045042677480191000000919046068826'
于 2013-03-20T19:57:59.877 回答
0

使用 sed:

sed "s/^.\{4\}/&,/;s/.\{6\}/&,/;s/.\{8\}/&,/;s/.\{20\}/&,/;s/.\{37\}/&,/;s/.\{52\}/&,/;s/.\{69\}/&,/;s/.\{72\}/&,/;s/.\{91\}/&,/" filename
于 2013-03-20T20:12:41.553 回答
0

您可以在 bash 脚本中使用 head 和 tail 命令。首先查看终端中的手册man headman tail您将了解详细信息。我想展示我的逻辑,我不知道这是不是好主意。假设您的文件名是original.txt 现在像这样读取前 3 个字符

var1=$(head -c 3 original.txt)

前三个字符存储在变量 var1 中,即 225 将该值存储在另一个文件中,让我们说final.txt通过放置分隔符。现在这次读取前四个字符,如下所示

var2=$(head -c 4 original.txt)

前四个字符存储在变量 var2 中,即 2250 在临时文件中回显它echo var2>temp.txt

但是这次你必须像下面这样使用tail

var3=$(tail -c 1 temp.txt)

这里最后一个字符存储在变量 var3 即 0 中,使用分隔符将此 var3 附加到文件 final.txt 中。这次 final.txt 必须是这个样子255,0,

下一个字符可以像上面一样完成。我们也可以使用循环来做到这一点。

于 2013-03-20T20:13:26.887 回答