我有一个包含两列的文件,如下所示(示例):
文件1:
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9
我需要格式化它,我的预期输出应该是:
文件1:
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9
答案1
如果输入只有两列,我会建议使用column -t
.但这在这里不太适用,因为该column
实用程序会将任意数量的空格或制表符视为列分隔符:
$ column -t file1
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9
“Michael Rod”是两列,因此单行比其他行多一列,这会弄乱输出。
我们可以通过在最后一列之前插入一个制表符来解决这个问题,然后让column
(仅)使用它作为分隔符:
$ awk '{ $NF = "\t" $NF; print }' file1 | column -t -s $'\t'
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9
在awk中,NF
是字段(列)的数量,$NF
是最后一个字段中的数据。我使用的脚本很简单修改在打印整行之前,通过在前面添加制表符来显示最后一个字段的数据。
如果您的 shell 不理解$'\t'
,那么您可以选择另一个不属于数据的字符:
awk '{ $NF = "@" $NF; print }' file1 | column -t -s '@'
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9