3

特定の文字の後に区切り記号を入れたいテキスト ファイルがあります (修正)。のように、文字の後に区切り文字 (, など)1-3を置き4ます56-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)

最初の 3 文字は変数 var1 に格納されます。つまり、225 はその値を別のファイルに格納し、区切り文字を付けてfinal.txtとします。今度は以下のように最初の 4 文字を読みます

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

最初の 4 文字は変数 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 に答える