пытаясь настроить пользователя / папку SFTP, к которой также будет доступен доступ по http

Другой способ 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 для записи записи.

(Это, вероятно, более полезно для случаев, когда дополнительная обработка должна выполняться на компонентах, чем для точного примера, показанного просто для печати таблицу.)

0
задан 8 January 2018 в 02:03

0 ответов

Другие вопросы по тегам:

Похожие вопросы: