ファイルの個々の数字の間にスペースを挿入するには?

ファイルの個々の数字の間にスペースを挿入するには?

私のデータは次のとおりです。

$ cat input
1212103122
1233321212
0000022221

出力が次のようになります。

$ cat output
1 2 1 2 1 0 3 1 2 2
1 2 3 3 3 2 1 2 1 2
0 0 0 0 0 2 2 2 2 1

私は試した:

sed -i 's// /g' input > output

しかし、うまくいきません。

どんな提案がありますか?

答え1

これは私にとって効果的です。

sed 's/./& /g' input > output

$ cat input
1212103122
1233321212
0000022221

$ cat output
1 2 1 2 1 0 3 1 2 2 
1 2 3 3 3 2 1 2 1 2 
0 0 0 0 0 2 2 2 2 1 

答え2

あなたのため:

sed 's/\(.\{1\}\)/\1 /g' input > output

変更をそのまま保存するには:

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

仕組み:

s/\(.\{1\}\)/\ /g1文字ごとにスペースが追加されます。

たとえば、次のような出力ファイルが必要な場合:

12 12 10 31 22
12 33 32 12 12
00 00 02 22 21

私の答えは次のように編集できます。

sed -i 's/\(.\{2\}\)/\1 /g'

したがって、2文字ごとにスペースが追加されます。

また、/\1 /はと同じで/&スペースを追加します。たとえば、次の3つを追加します。/\1 /または/& /。より多くのオプションが利用可能です。 Sedは非常に強力なツールです。

またはい、@Law29で述べたように削除しないと、各行の末尾にスペースが残ります。したがって、スペースが追加されたときに削除するには、指定されたs/ $//ソリューションの最後にaを追加するだけです。 :

sed 's/./& /g; s/ $//'

これが役に立つことを願っています。

答え3

-iファイルをその場で編集することを選択できます。これにより、正しい解決策が見つからない可能性があります。

sed問題は、許可されていない空の文字列を一致させようとしていることです。代わりに、任意の文字と一致し、それを同じ文字の後にスペースが続く文字に置き換えます。これにより、各行の末尾にスペースが残り、他のsedを使用して削除できます。

$ cat input 
1212103122
1233321212
0000022221
$ sed -e 's/./& /g' -e 's/ $//' input > output
$ cat output
1 2 1 2 1 0 3 1 2 2
1 2 3 3 3 2 1 2 1 2
0 0 0 0 0 2 2 2 2 1
$ 

答え4

オプションは次のとおりですawk

awk -F '' '{$1=$1}1' input > output

動作原理は次のとおりです。

  • 空のフィールド区切り文字を設定して、-F ''入力レコード(行)を単一の文字に分割します。

  • 評価では、デフォルトの$1=$1出力フィールド区切り文字(スペース)を使用してレコードを強制的に書き換えます。

  • 1true なので結果を印刷してください。


Perlにも同様のトリックがあります:

perl -F'' -alne 'print join " ", @F' input > output

表示するには:

$ awk -F '' '{$1=$1}1' input
1 2 1 2 1 0 3 1 2 2
1 2 3 3 3 2 1 2 1 2
0 0 0 0 0 2 2 2 2 1

関連情報