带空格的文件输出格式 unix

file output formatting with spaces unix

这是原始文件的样子

cat new

Jackson, Bob D. C0001 book pizza apple 4.00 123as
Filer, Jack C0002 happy apple hat 4.00 124ab
Metro, Jim K. C0003 kindle pizza grape 4.00 125ac

我在为没有中间名的名称格式化此文件时遇到问题。

$ cat new | awk '{printf "%10s %7s %3s %6s %7s %6s %6s %4s %6s\n" , , , , , , , , }'

Jackson, Bob D. C0001 book   pizza apple 4.00 123as
Filer, Jack C0002 happy  apple hat   4.00 124ab
Metro, Jim K.   C0003 kindle pizza grape 4.00 125ac

现在这就是我希望的格式,每一列都是 spaced 1 space 就像名字是 Jackson,Bob D. 是列 c0001 是一个列,现在名称在每个字母之间有 spaces。问题是没有中间名的人把一切都搞砸了我怎么才能把这个文件格式化成这样

Jackson, Bob D. C0001 book   pizza apple 4.00 123as
Filer, Jack     C0002 happy  apple hat   4.00 124ab
Metro, Jim K.   C0003 kindle pizza grape 4.00 125ac

所以一切都排好了,看起来很干净,如有任何问题,请告诉我,在此先感谢您的帮助!

awk 救援!

$ awk -v OFS='~' '{=" ";=""} 
            NF==10{=" ";=""} 
             NF==9{= OFS ""}1' file | column -ts~

1  Jackson, Bob D.  C0001  book    pizza  apple  4.00  123as
2  Filer, Jack      C0002  happy   apple  hat    4.00  124ab
3  Metro, Jim K.    C0003  kindle  pizza  grape  4.00  125ac

您可以移动 awk 中的字段作为替代解决方案,但这也有效。

将输出字段分隔符 (OFS) 设置为一些未使用的字符(此处为波浪号)并让 column 通过该分隔符处理格式。