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

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

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

Это дает вывод, например:

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

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

53
задан 12 April 2016 в 12:41

5 ответов

Еще один специфичный для awk метод, используйте «разделитель выходного поля»

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

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

0
ответ дан 12 April 2016 в 12:41

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

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 ;
0
ответ дан 12 April 2016 в 12:41

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

ls -la | gawk '{print $1, $9}'
0
ответ дан 12 April 2016 в 12:41

Чтобы разместить пробел между аргументами, просто добавьте " ", например, 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 4096
7c1c.txt 21 8 81a4 501 20 1000004 242236595 1 0 0 1460261322 1460260486 1460260486 1460260486 4096

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

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

0
ответ дан 12 April 2016 в 12:41

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

awk {'print $5"\t"$1'}
0
ответ дан 12 April 2016 в 12:41

Другие вопросы по тегам:

Похожие вопросы: