1

次のような大きなレポートファイル(約20MB)があります。

 586  700006207        8,622.09  896 
                       9,882.82  896 
 777   68607099          900.00  896 
 587  800006207        7,059.22  896 
                         959.02  896 
                         697.87  896 
   7  280667985             .00  899 

値が上の行と同じである場合、1列目と2列目には空白があります。空のスペースを埋めるためにgrep/sed / powershellワンライナーの助けが必要なので、次のようになります。

 586  700006207        8,622.09  896 
 586  700006207        9,882.82  896 
 777   68607099          900.00  896 
 587  800006207        7,059.22  896 
 587  800006207          959.02  896 
 587  800006207          697.87  896 
   7  280667985             .00  899 

ありがとう。

4

3 に答える 3

1

これはあなたのために働くかもしれません:

sed ':a;$!N;/^\(\( [0-9]\+ *[0-9]\+\).*\n\)\( \{15\}\)/{s//\1\2/;ta};P;D' file

指定したデータから、行は常にスペースで始まります。そうでない場合は、次のようにします。

sed ':a;$!N;/^\(\([0-9]\+ *[0-9]\+\).*\n\)\( \{14\}\)/{s//\1\2/;ta};P;D' file
于 2012-04-11T18:49:49.900 に答える
1

空白行がなく、列間の区切り文字がスペースであると仮定すると、次のように動作します (GNU sed を使用して、Ubuntu/bash シェルでテスト済み)...

sed -r "/^ {15}/{G; s/^ {15}(.*)\n(.{15}).*/\2\1/};h" "report"
于 2012-04-11T19:09:37.343 に答える
1

間隔を維持する必要があり、最初の 2 列が最初の 15 文字であると仮定します。

awk '
    NF==2 {print fill substr($0, 16); next}
    {print; fill = substr($0, 1, 15)}
'
于 2012-04-11T19:35:59.257 に答える