Перенаправление многострочного вывода на несколько файлов
у меня есть список URL-адресов, и я хотел бы определить, что такое каталог, а что нет:
https://www.example.com/folder/
https://www.example.com/folder9/
https://www.example.com/folder/file.sh
https://www.example.com/folder/text
Я могу использовать grep -e /$
чтобы найти, что есть что, но я хотел бы сделать встроенную команду, где я могу перенаправить вывод на основе этой логики.
Я понимаю, что awk может иметь ответ здесь, но у вас недостаточно опыта в awk для этого.
что-то типа:
cat urls | if /$ matches write to folders.txt else write to files.txt
я мог бы бросить все это в файл, а затем прочитать его дважды, но когда он попадая в тысячи строк, я чувствую, что это было бы неэффективно.
3 ответов
да awk
является отличным выбором для этого:
awk '/\/$/ { print > "folders.txt"; next }
{ print > "files.txt" }' urls.txt
-
/\/$/ { print > "folders.txt"; next }
если строка заканчивается на/, запишите ее в папки.TXT и перейти к следующей строке -
{ print > "files.txt" }
добавить все остальные строки в файлах.txt
вы можете использовать выражение /\/[[:space:]]*$/
вместо /\/$/
в случае, если у вас есть пробелы в файл.
с заменой процессов coreutils, grep и bash:
<urls tee >(grep '/$' > folders.txt) >(grep -v '/$' > files.txt) > /dev/null