Intereting Posts
`sort` игнорирует вопросительный знак Как использовать ядро ​​Hurd в установке Debian? Печатать слово, которое не содержит символа Проблема с usb на CentOS Bash: замена процесса и stdin Разгрузка GPU с использованием wayland и x11 Перенаправить вывод сценария в / dev / tty1, а также отобразить вывод в файл «Не удалось найти свойства синаптики. Не загружен драйвер synaptics? »После перезагрузки. Прокрутка не работает Какой Linux лучше всего подходит для людей, не знакомых с компьютерами? sed: удалить все вхождения строки, кроме первой Почему домашний каталог не создается при создании нового пользователя? Как обрабатывать каталог сначала, а затем файлы и каталоги под ним? Выполнять вторую команду в цепочке как другой пользователь UNIX: нужно заменить последнюю строку на файле, а также удалить лишнюю пустую строку в конце как записывать всех, кто входит в мои Linux-машины, и записывать их

Awk: печать последних N столбцов, где N передается через переменную

Моя переменная ввода $dirPath содержит путь к каталогу. Действие состоит в том, чтобы иметь возможность извлекать последние N значений в пути к каталогу, где N передается через переменную $depth . Для фиксированного значения N (скажем, 2) я могу достичь этого через

 subDir=$(echo $dirPath|awk -F "/" '{n= 2; for (--n; n >= 0; n--){ printf "%s/", $(NF-n)} print ""}') 

Однако, если я попытаюсь заменить 2 в приведенной выше команде переменной как n=$depth , переменная subDir пуста. Итак, как я могу передать значение переменной вышеуказанной команде?

Если вы хотите передать переменную bash в awk тогда вам понадобится использовать параметр aw -v :

 awk -vn=$depth -F "/"... 

Поскольку вы используете bash , вам не нужны внешние инструменты, такие как awk

 #read path constituents into array arr IFS=/ read -ra arr <<<"$dirPath" n=2 #print the last two (IFS=/; printf '%s\n' "${arr[*]:(-n)}")