Using awk to align columns in text file?

前端 未结 3 917
暗喜
暗喜 2020-12-23 12:45

Would awk be useful to convert \"Input\" to \"Desired output\"?

Input

testing speed of encryption
test 0 (64 bit key, 1         


        
相关标签:
3条回答
  • 2020-12-23 12:58

    Yes. Look at the syntax for awk's printf() function. Abbreviated sample code . . .

    {
      printf("%s %2s ", $1, $2);
      printf("%4s %s %s ", $3, $4, $5);
      printf("%4s %s %s ", $6, $7, $8);
      printf("%7s\n", $9);
    }
    

    Output.

    test  0  (64 bit key,   16 byte blocks): 2250265
    test  1 (128 bit key,   64 byte blocks):  879149
    test  2 (128 bit key,  256 byte blocks):  258978
    test  3 (128 bit key, 1024 byte blocks):   68218
    test  4 (128 bit key, 8192 byte blocks):    8614
    test 10 (256 bit key,   16 byte blocks): 1790881
    

    Docs for GNU awk's printf().

    There are several ways to pass the "heading" through unmodified. This way assumes it's always on the first line of the file.

    NR==1 { print $0}
    NR>1 {
      printf("%s %2s ", $1, $2);
      printf("%4s %s %s ", $3, $4, $5);
      printf("%4s %s %s ", $6, $7, $8);
      printf("%7s\n", $9);
    }
    
    0 讨论(0)
  • 2020-12-23 13:10
    awk '
    FNR==1 { if (NR==FNR) print; next }
    NR==FNR {
       for(i=1;i<=NF;i++)
          w[i] = (w[i] <= length($i) ? length($i) : w[i])
       next
    }
    {
       for(i=1;i<=NF;i++)
          printf "%*s",w[i]+(i>1?1:0),$i
       print ""
    }
    ' file file
    
    0 讨论(0)
  • 2020-12-23 13:13

    A trick to align right using column is to use rev:

    $ head -1 file; tail -n+2 file | rev | column -t | rev
    testing speed of encryption
    test   0   (64  bit  key,    16  byte  blocks):  2250265  operations  in  1  seconds  (36004240  bytes)
    test   1  (128  bit  key,    64  byte  blocks):   879149  operations  in  1  seconds  (56265536  bytes)
    test   2  (128  bit  key,   256  byte  blocks):   258978  operations  in  1  seconds  (66298368  bytes)
    test   3  (128  bit  key,  1024  byte  blocks):    68218  operations  in  1  seconds  (69855232  bytes)
    test   4  (128  bit  key,  8192  byte  blocks):     8614  operations  in  1  seconds  (70565888  bytes)
    test  10  (256  bit  key,    16  byte  blocks):  1790881  operations  in  1  seconds   (3654096  bytes)
    
    0 讨论(0)
提交回复
热议问题