Text-Processing

在多個有序列中插入缺失的字元串

  • October 25, 2014

我有一個看起來像這樣的多列文件:

  6 93129B 177        306.98  350.20  8.84    0.23   -0.79    0.22   0.46        m
  7      8 192        269.08  413.35  9.29    0.15   -0.81    0.14   0.33        m
 32             Y582  506.12  797.42 11.60    1.07    0.82                  89  nm
  9     35 316  FA35 -241.54  431.17  9.85    1.30    0.92    0.54           0  nm
 10         61  Y579  765.80  819.03  9.97    0.32   -0.66                  77   m
 11      9 165        346.38  360.62  9.99    0.17   -0.83    0.16   0.41        m
 12     30  71  Y500  720.08   40.65 10.10    0.43   -0.41    0.41   0.85   83   m
 13    127 200 FA127  250.63  -35.95 10.68    0.31   -0.57    0.32   0.72   96   m
 14      3 149        375.53  334.00 10.73    0.28   -0.65    0.23   0.49        m
 15     21 127  Y547  459.69  280.64 10.78    0.35   -0.67    0.28   0.61   81   m
 16    126 195 FA126  268.94   12.08 10.93    0.35   -0.43    0.34   0.77   96   m
 17                   328.30  358.74 10.94    0.17   -0.72    0.16   0.39        m
 18         92        585.72  -41.89 11.02    0.41   -0.44    0.46   1.01        m
 19      4 163  Y551  348.90  302.36 11.04    0.26   -0.68    0.23   0.51   95   m

請注意,這些列有序的,但其中許多都缺少許多元素。我需要用一個字元串填充這些空格,比如說--它看起來像:

  6 93129B 177  --    306.98  350.20  8.84    0.23   -0.79    0.22   0.46   --   m
  7      8 192  --    269.08  413.35  9.29    0.15   -0.81    0.14   0.33   --   m
 32 --     --   Y582  506.12  797.42 11.60    1.07    0.82    --     --     89  nm
  9     35 316  FA35 -241.54  431.17  9.85    1.30    0.92    0.54   --      0  nm
 10     --  61  Y579  765.80  819.03  9.97    0.32   -0.66    --     --     77   m
 11      9 165  --    346.38  360.62  9.99    0.17   -0.83    0.16   0.41   --   m
 12     30  71  Y500  720.08   40.65 10.10    0.43   -0.41    0.41   0.85   83   m
etc...

我已經嘗試過這裡這里這裡給出的答案,但這些似乎都不適用於這個問題(或者至少我不知道如何正確應用它們)。

如果您有 GNU awk(或支持該FIELDWIDTHS變數的等價物),並且您不介意--標記在欄位寬度內右對齊,那麼您可以執行類似的操作

gawk -vFIELDWIDTHS="4 7 4 6 8 8 6 8 8 8 7 5 4" -vOFS= '
 {for (i=1;i<=NF;i++) sub("  $","--",$i);}1
' file

即。

$ gawk -vFIELDWIDTHS="4 7 4 6 8 8 6 8 8 8 7 5 4" -vOFS= '
 {for (i=1;i<=NF;i++) sub("  $","--",$i);}1
' file
  6 93129B 177    --  306.98  350.20  8.84    0.23   -0.79    0.22   0.46   --   m
  7      8 192    --  269.08  413.35  9.29    0.15   -0.81    0.14   0.33   --   m
 32     --  --  Y582  506.12  797.42 11.60    1.07    0.82      --     --   89  nm
  9     35 316  FA35 -241.54  431.17  9.85    1.30    0.92    0.54     --    0  nm
 10     --  61  Y579  765.80  819.03  9.97    0.32   -0.66      --     --   77   m
 11      9 165    --  346.38  360.62  9.99    0.17   -0.83    0.16   0.41   --   m
 12     30  71  Y500  720.08   40.65 10.10    0.43   -0.41    0.41   0.85   83   m
 13    127 200 FA127  250.63  -35.95 10.68    0.31   -0.57    0.32   0.72   96   m
 14      3 149    --  375.53  334.00 10.73    0.28   -0.65    0.23   0.49   --   m
 15     21 127  Y547  459.69  280.64 10.78    0.35   -0.67    0.28   0.61   81   m
 16    126 195 FA126  268.94   12.08 10.93    0.35   -0.43    0.34   0.77   96   m
 17     --  --    --  328.30  358.74 10.94    0.17   -0.72    0.16   0.39   --   m
 18     --  92    --  585.72  -41.89 11.02    0.41   -0.44    0.46   1.01   --   m
 19      4 163  Y551  348.90  302.36 11.04    0.26   -0.68    0.23   0.51   95   m

引用自:https://unix.stackexchange.com/questions/164207