0

次のようなファイルがあります。

113728482180.18408400639521053213728482180.18534013377161235313728482180.18527849814511801413728482180.12680711716571988513728482180.40802725786530114613728482180.039221670254883746713728482180.42748179436369843813728482180.45107192556631565913728482180.43916947404834661013728482180.12677684033447337

\n一致する位置の 11 文字前にテキスト (この場合は a ) を追加するにはどうすればよい0.ですか?

私は次のようなものになりたい:

113728482180.18408400639521053
213728482180.18534013377161235
313728482180.18527849814511801
413728482180.12680711716571988
513728482180.40802725786530114
613728482180.039221670254883746
713728482180.42748179436369843
813728482180.45107192556631565
913728482180.43916947404834661
013728482180.12677684033447337

可能であれば、以下も解決したいと思います。各行の最初の桁はカウンター (1、2、3、...、10、...、10000、...) です。9 行目の最後の桁 (1) も 10 行目に含めて、この行が 0 ではなく 10 で始まるようにする必要があります。これは、1000、10000、および 100000 にも必要です。

出来ますか?たとえば、行 1 ~ 9 のオフセットは 11、行 10 ~ 99 のオフセットは 12、行 100 ~ 999 のオフセットは 13 などです。

上記の例では、最後の 2 行は次のようになります。

913728482180.4391694740483466
1013728482180.12677684033447337

カウンターはシーケンシャルです。数百、数千のオーダーのより大きな数の場合、一致の前に改行の 11 文字を追加するだけで、10000 の場合は次のようになります。

213728482180.43916947404831000
313728482180.12677684033441000

しかし、目的は次のものを取得することです。

1000213728482180.4391694740483
1000313728482180.1267768403344
4

2 に答える 2

4

これを試してください: (gnu sed)

 sed -r 's/([^.]{12}\.)/\n\1/2g' file

例:

kent$  sed -r 's/([^.]{12}\.)/\n\1/2g' a
113728482180.18408400639521053
213728482180.18534013377161235
313728482180.18527849814511801
413728482180.12680711716571988
513728482180.40802725786530114
613728482180.039221670254883746
713728482180.42748179436369843
813728482180.45107192556631565
913728482180.43916947404834661
013728482180.12677684033447337
于 2013-07-03T11:18:37.290 に答える
0

sed で bash の for ループを使用するのはどうですか?

str="..."
for II in `seq 2 10`; do
  str=`echo $str | sed -e 's#\('$II'13728482180\.\)# \1#'`
done
echo $str | tr ' ' '\n'

事前にわかっている場合は、seq 2 10を独自の番号 N,に置き換えることができますseq 2 N

于 2013-07-03T11:50:51.757 に答える