Я хотел бы использовать AWK, чтобы удалить первые 8 столбцов из следующего вывода:
ls -l
lrwxrwxrwx 1 user user 23 jul 27 00:04 file1.pdf
-rw-rw-r-- 1 user user 107 may 8 13:59 file 2 with spaces.mp3
lrwxrwxrwx 1 user user 11 jul 24 19:43 file3-with-hyphens.txt
lrwxrwxrwx 1 user user 11 jul 24 19:43 and_another_file4_with_underscores.md
-rw-rw-r-- 1 user user 107 may 8 13:59 file 5 with way more spaces than the rest.mp3
и отправьте результат в текстовый файл. Я могу сделать это вручную в vim с визуальным выбором блока, однако я бы предпочел иметь скрипт для этого автоматически.
Оглядываясь вокруг, я смог найти эту страницу, где, изменяя соответствующие части 9-го примера и передавая вывод на себя столько раз, сколько требовалось, я мог получить желаемый результат, но я чувствую, что должно быть лучше (более элегантный и / или компактный) способ сделать это, но я не смог найти его или придумать свой собственный.
Мой окончательный код следующий:
awk '{for(i=1;i<=NF;i++)if(i!=x)f=f?f FS $i:$i;print f;f=""}' x=1 ~/file_folder_content.txt | awk '{for(i=1;i<=NF;i++)if(i!=x)f=f?f FS $i:$i;print f;f=""}' x=1 | ... | awk '{for(i=1;i<=NF;i++)if(i!=x)f=f?f FS $i:$i;print f;f=""}' x=1 >> ~/file_folder_content.txt
Примечание 1: я ожидаю, что фактический вывод команды ls
будет намного больше, чем этот.
Примечание 2: я попытался напечатать 9-е поле, но так как некоторые имена файлов содержат пробелы, это печатает только первое слово в имени файла.