空白なしで文字列で書式設定された数字を小数点以下の桁数で空白の数字で区切る方法

空白なしで文字列で書式設定された数字を小数点以下の桁数で空白の数字で区切る方法

数字の間にスペースがないシミュレーションのテキストファイルがあります。以下に例を示します。小数点(13)を基準に数字を区切りたいです。

5.656854249492415.594870951694315.594870951694315.594870951694321.466252583998021.466252583998021.466252583998027.4809024597083   

私は次の出力が欲しい:

5.6568542494924   
15.5948709516943  
15.5948709516943  
15.5948709516943  
21.4662525839980  
21.4662525839980  
21.4662525839980  
27.4809024597083

以下のsedコマンドを試しましたが、うまくいきません。

sed -i 's/\(.\{14\}\)/\1 /g' input.txt

参考のためにスクリーンショットを添付しました。ここに画像の説明を入力してください。

役立つアドバイスをいただきありがとうございます。
ありがとう

答え1

私はあなたがこれを行うことができると思いますgrep

$ grep -Eo '[0-9]+\.[0-9]{13}' < input.txt
5.6568542494924
15.5948709516943
15.5948709516943
15.5948709516943
21.4662525839980
21.4662525839980
21.4662525839980
27.4809024597083

これは、前の一致が終了した位置から始まり、次の一致を見て重複する一致を見つけることができないために機能します。[0-9]+\.[0-9]{0,13}数字ではなく数字で区切られている限り、より短い数字を許可するように変更できます。これも一致がグリーディーであるために機能するため、数字が13個の場合は、次の数字に進む前に最初の数字のすべての数字を切り捨てます。

答え2

以下を使用できますsed(ドットの後の13文字)。

# with new lines as in the output shown in the question
$ sed 's/\.\([^.]\{13\}\)/&\n/g' file
5.6568542494924
15.5948709516943
15.5948709516943
15.5948709516943
21.4662525839980
21.4662525839980
21.4662525839980
27.4809024597083

またはより簡潔なGNU sed

$ sed -E 's/\.[^.]{13}/&\n/g'

答え3

sed標準(GNU以外)の使用(改行を挿入するコマンドは使用できません):\ns

$ sed -e 's/[0-9]\{13\}/&:/g' -e 'y/:/\n/' file
5.6568542494924
15.5948709516943
15.5948709516943
15.5948709516943
21.4662525839980
21.4662525839980
21.4662525839980
27.4809024597083

これは:入力の13桁ごとに1を挿入し、このyコマンドを使用してすべてのコロンを改行文字に置き換えます。

またはリテラルの改行を使用してください。

sed 's/[0-9]\{13\}/&\
/g' file

またはシェルが$'...'文字列を理解している場合:

sed $'s/[0-9]\\{13\\}/&\\\n/g' file

答え4

echo '5.6568542494924 15.5948709516943 15.594870951694315.594870951694321.466252583998021.466252583998021.466252583998027.4809024597083' |
    awk -F . '{ printf "%d.",$1; for(i=2;i<NF;i++) { frac=substr($i,1,13); intg=substr($i,14); printf "%s\n%d.",frac,intg; } print $NF;}'
5.6568542494924
15.5948709516943
15.5948709516943
15.5948709516943
21.4662525839980
21.4662525839980
21.4662525839980
27.4809024597083

このソリューションは入力のスペースを処理します。

関連情報