在多个有序列中插入缺失的字符串

在多个有序列中插入缺失的字符串

我有一个多列文件,如下所示:

   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...

我已经尝试过给出的答案这里,这里这里但这些似乎都不适用于这个问题(或者至少我不知道如何正确应用它们)。

答案1

如果您有 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

相关内容