Другой способ AWK - рассматривать каждый каталог как отдельную запись, а не как отдельное поле.
awk 'BEGIN{RS=":"} {print $0}' <<<"$PATH"
Я нахожу этот синтаксис особенно интуитивным. Но, если хотите, вы можете сократить его, сделав print $0 неявным (это действие по умолчанию, а 1 оценивается как true, что приведет к его выполнению для каждой строки):
awk 'BEGIN{RS=":"} 1' <<<"$PATH"
Разделитель входных и выходных данных по умолчанию AWK - это новая строка (разрыв строки). Установив разделитель входных данных (RS) на : перед чтением ввода, AWK автоматически анализирует разграниченный двоеточием $PATH в его именах constitentent. AWK расширяет $0 до каждой целой записи, новая строка остается разделителем записи записи , и не требуется цикл или gsub.
ek@Io:~$ echo "$PATH"
/home/ek/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ek@Io:~$ awk 'BEGIN{RS=":"} {print $0}' <<<"$PATH"
/home/ek/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin
AWK часто используется для (! d6)
Это работает даже для ввода, содержащего пробелы (пробелы и табуляции), даже несколько последовательных пробелов:
ek@Io:~$ awk 'BEGIN{RS=":"} {print $0}' <<<$'ab\t\t c:de fg:h'
ab c
de fg
h
То есть, если вы не заставите AWK перестроить запись (см. ниже), нет проблем с наличием пробелов или вкладок (разделителей полей по умолчанию) на входе. Ваш PATH, вероятно, не содержит пробелов в системе Ubuntu, но если это произойдет, это все равно будет работать.
Стоит упомянуть в качестве примечания, что AWK способность интерпретировать запись как коллекцию полей rebuild , полезная для связанной задачи построения таблицы каталога field :
ek@Io:~$ awk -F/ 'BEGIN{RS=":"; OFS="\t"} {$1=$1; print $0}' <<<"$PATH"
home ek bin
usr local sbin
usr local bin
usr sbin
usr bin
sbin
bin
usr games
usr local games
snap bin
Любопытный Назначение $1=$1 служит для принудительного восстановления AWK для записи записи.
(Это, вероятно, более полезно для случаев, когда дополнительная обработка должна выполняться на компонентах, чем для точного примера, показанного просто для печати таблицу.)