文件输出格式与空格unix

时间:2016-03-27 22:29:27

标签: unix awk formatting text-processing

这是原始文件的样子

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" $1, $2, $3, $4, $5, $6, $7, $8, $9}'

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

现在这就是我想要的格式是每个列间隔1个空格一个部分,就像名字是杰克逊,鲍勃D.是一个列c0001是一个列现在名称有空格在每个字母之间。问题是没有中间名的人会弄乱一切我怎样才能将这个文件格式化为这样

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

所以所有问题都排好并且看起来很干净任何问题让我知道,并提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

awk救援!

$ awk -v OFS='~' '{$2=$2" "$3;$3=""} 
            NF==10{$2=$2" "$4;$4=""} 
             NF==9{$3=$3 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)设置为一些未使用的char(此处为tilde),并让column通过该分隔符处理格式化。