2013-04-01 5 views
0

Я хочу добавить новый столбец в начале каждой строки. Команда используется:Добавление столбца с awk

дерево -afispugD --inodes

Я хочу поставить новый столбец, который будет имя файла.

Пример:

119801433 -rwxr--r-- u1915811 alum   1252 Apr 1 21:06 ./file 
119802284 -rw-r--r-- u1915811 alum   1255 Mar 20 10:25 ./text.txt 
119865862 drwxr-xr-x u1915811 alum   4096 Feb 27 10:20 ./S3/folder2 

Для этого:

file  119801433 -rwxr--r-- u1915811 alum   1252 Apr 1 21:06 ./file 
text.txt 119802284 -rw-r--r-- u1915811 alum   1255 Mar 20 10:25 ./text.txt 
folder2 119865862 drwxr-xr-x u1915811 alum   4096 Feb 27 10:20 ./S3/folder2 

PS: Я должен сделать это, потому что tree команда не показывает имена :(

ответ

1

Все, что вам нужно:

$ awk -F'/' '{print $NF,$0}' file 
file 119801433 -rwxr--r-- u1915811 alum   1252 Apr 1 21:06 ./file 
text.txt 119802284 -rw-r--r-- u1915811 alum   1255 Mar 20 10:25 ./text.txt 
folder2 119865862 drwxr-xr-x u1915811 alum   4096 Feb 27 10:20 ./S3/folder2 

или если вы хотите использовать какой-то конкретный интервал в выходном использования Printf вместо печать:

$ awk -F'/' '{printf "%-10s%s\n",$NF,$0}' file 
file  119801433 -rwxr--r-- u1915811 alum   1252 Apr 1 21:06 ./file 
text.txt 119802284 -rw-r--r-- u1915811 alum   1255 Mar 20 10:25 ./text.txt 
folder2 119865862 drwxr-xr-x u1915811 alum   4096 Feb 27 10:20 ./S3/folder2 

или, так как это простая замена на одной строке, вы можете использовать СЭД вместо AWK:

$ sed 's/\(.*\/\(.*\)\)/\2 \1/' file 
file 119801433 -rwxr--r-- u1915811 alum   1252 Apr 1 21:06 ./file 
text.txt 119802284 -rw-r--r-- u1915811 alum   1255 Mar 20 10:25 ./text.txt 
folder2 119865862 drwxr-xr-x u1915811 alum   4096 Feb 27 10:20 ./S3/folder2 
+0

Спасибо, что сработало :) – Albert

0

Это один будет работать, если у файла есть пробелы в его имени или если это символическая ссылка

tree -afispugD --inodes | awk '{FS="./"; ORS=""; printf("%-60s%s\n",$NF,$0)}' 
+1

Вы знаете, что вы устанавливаете значения 'FS' и' ORS' на каждую строку в файле !? Вместо этого вы должны выполнить 'awk '{printf ("% - 60s% s \ n ", $ NF, $ 0)}' FS =" ./ "ORS =" "' –

+0

Я искал его и обнаружил, что это делается в BEGIN блок лучше, потому что он выполняется один раз, прежде чем будет прочитана первая входная запись. Большое спасибо :) –

+0

Да, вы также можете установить значения в блоке 'BEGIN', но для одного лайнера просто установите значения после скрипта –

0

До тех пор, пока пробелы в именах файлов, это должно работать:

tree -afispugD --inodes | awk '{printf("-30s%s\n",$NF,$0}' 
Смежные вопросы