使用awk格式化文件

时间:2016-03-23 02:41:26

标签: unix awk printf

好吧所以这是我下一个文件的问题所以我试图找出如何格式化我创建的文件,其中包含我需要的所有信息,但我需要更改输出看起来如此

cat file

Jackson D. Bob 0001 book pizza apple 4.00 123as Filer J. Jake 0002 happy apple hat 4.00 124ab Metro K. Jim 0003 kindle pizza grape 4.00 125ac

好吧那就像文件中的whats然后我需要将输出格式化为这样的

 # name           LS   item1  item2     item3   point  ad
 - -------------- ---- ------ --------  ------  -----  -----
 1 Jackson D. Bob 0001 book   pizza     apple   4.00   123as
 2 Filer J. Jake  0002 happy  apple     hat     4.00   124ab
 3 Metro K. Jim   0003 kindle pizza     grape   4.00   125ac

现在我用cat文件尝试了一些不同的东西awk' printf {}' 命令,但它只是打印第一行并失败或将尝试打印第一个名称,然后它下面的每个项目不是在这个表样式

现在记住项目,左边的数字是用循环生成的,然后#Name LS打印到与破折号相同的位置

2 个答案:

答案 0 :(得分:2)

使用GNU awk进行多字符RS和RT:

$ awk -v RS='[0-9]{3}[[:alpha:]]{2}[[:blank:]]*' 'RT{print NR, $0 RT}' file
1 Jackson D. Bob 0001 book pizza apple 4.00 123as
2 Filer J. Jake 0002 happy apple hat 4.00 124ab
3 Metro K. Jim 0003 kindle pizza grape 4.00 125ac

答案 1 :(得分:1)

就我而言

$ sed -r 's/[0-9]+[a-z]+ /&\n/g' data_on_a_single_line | column -t

Jackson  D.  Bob   0001  book    pizza  apple  4.00  123as
Filer    J.  Jake  0002  happy   apple  hat    4.00  124ab
Metro    K.  Jim   0003  kindle  pizza  grape  4.00  125ac

您可以根据字段长度添加魔术标题和下划线,也可以合并awk

中的前3个名称字段