Как разделить поля пробелом или табуляцией в awk

Во время игры с awk Я пришел казнить:

ls -la >> a.txt ; awk {'print $5  $1'} a.txt ;

Это дает результат, подобный:

53277-rw-------52347-rw-------

Как я могу получить пробел между этими двумя друзьями вывода?

Просто измените строку на

ls -la >> a.txt ; awk {'print $5 "        " $1'} a.txt ;

это должно вывести выходные данные с пробелами.

Надеюсь, это поможет.

Редактировать:

Как было предложено МаКнисс вы можете использовать printf, который обеспечит вам хороший формат вывода

ls -la >> a.txt ; awk {'printf ("%5s\t%s\n", $5, $1)'} a.txt ;

Другой специфичный для awk метод - использовать "разделитель полей вывода".

ls -la | awk -v OFS='\t' '{print $5, $1}'

Запятая здесь имеет решающее значение.

Простой способ получить вкладки - это:

awk {'print $5"\t"$1'}

Я знаю, что это старая тема, но я только учусь и нашел эти сообщения полезными. Моим лучшим решением было использовать gawk для вставки пробелов между переменными для вас.

ls -la | gawk '{print $1, $9}'

Чтобы поместить пробел между аргументами, просто добавьте " ", например awk {'print $5" "$1'}.

Однако это так нет рекомендуется для анализировать выходные данные ls команда, поскольку он ненадежен и вывод предназначен для людей, а не для скриптов. Поэтому используйте альтернативные команды, такие как find или stat.

Вот пример использования GNU stat:

$ stat -t *001.txt 23 8 81a4 501 20 1000004 242236402 1 0 0 1460260387 1460260239 1460260239 1460260194 40967c1c.txt 21 8 81a4 501 20 1000004 242236595 1 0 0 1460261322 1460260486 1460260486 1460260486 4096

который напечатает вам машинный вывод (в краткой форме), так что вы сможете получить именно то, что вам нужно. Затем используйте -c чтобы использовать определенный формат, или используйте awk, cut или read чтобы получить правильные столбцы.

Проверять stat --help для получения дополнительных вариантов. Например, чтобы напечатать день внесения изменений, установите флажок этот пример.

Возможный дубликат Как мне выбрать поле/столбец из выходных данных `ls -l'?

@kenorb и близкие избиратели, связанный дубликат вообще не является дубликатом. Они уже знают, как печатать поля по предпосылке (awk {'print $5 $1'} a.txt ). Они спрашивают, как поставить пробел между полем № 1 и полем № 5.

В качестве совета, вы не должны анализировать выходные данные ls. Рано или поздно это ударит вас в спину.

В awk, чтобы объединить две строки, вы просто размещаете их рядом - print $5 $1