这是原始文件的样子
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
所以所有问题都排好并且看起来很干净任何问题让我知道,并提前感谢您的帮助!
答案 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
通过该分隔符处理格式化。