Если бы на входе было только два столбца, я бы предложил использовать 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
данные в последнем поле. Используемый мной скрипт просто изменяет данные последнего поля, добавляя символ табуляции перед печатью всей строки.
Если ваша оболочка не понимает $'\t'
, вы можете выбрать другой символ, который не является частью данных:
awk '{ $NF = "@" $NF; print }' file1 | column -t -s '@'
John 1
Peter 2
Michael Rod 3
Su 7
Louise 9