Як відокремити поля пробілом або вкладкою


51

Під час гри awkя прийшов виконати:

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

Це дає вихід, як:

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

Як я можу отримати пробіл між цими двома друзями на виході?


1
Як порада, ви не повинні розбирати результат ls. Це рано чи пізно укусить вас у спину.
gniourf_gniourf

Будь-ласка, щоб поєднати два рядки, ви просто розмістіть їх поруч -print $5 $1
glenn jackman


2
@kenorb та близьких виборців, пов'язаний дублікат зовсім не є дублікатом. Вони вже знають, як друкувати поля за умови ( awk {'print $5 $1'} a.txt). Вони запитують, як розмістити пробіл між полем №1 та полем №5.
kos

Відповіді:


72

Просто змініть рядок на

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

це повинно друкувати вихід з пробілами.

Сподіваюся, це допомагає.

Редагувати:

Як запропонував McNisse, ви можете використовувати printf, що забезпечить хороший вихідний формат

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

4
Ця printfфункція забезпечує кращий контроль, особливо якщо ви хочете відформатувати номери. printf("%s\t%s\n", $5, $1)
Макнісс

Чи є помилка у відповіді вище? що 5sозначаєawk {'printf ("%5s\t%s\n", $5, $1)'}
Вішал

66

Ще одна специфічна методика - використання "роздільника вихідного поля"

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

Кома тут має вирішальне значення.


це працює, але викликає $1перехід на новий рядок
loretoparisi


5

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

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

3
-1: Нічого нового. gawk, mawkабо будь-який інший awk, всі вони вставляють пробіли, якщо ви користуєтесь комою, про що йдеться у цій відповіді .
muru

1
Повинно бути ls -la | awk '{print $1, $9}'. Як сказав Муру, gawkце не потрібно.
Нік Кроуфорд

1

Щоб розмістити пробіл між аргументами, просто додайте " ", наприклад 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подальші варіанти. Наприклад, щоб надрукувати день модифікації, перевірте цей приклад .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.