将多行输出重定向到多个文件

8

我有一份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个回答

6

是的,对于这个问题,awk 是一个很好的选择:

awk '/\/$/ { print > "folders.txt"; next }
           { print > "files.txt" }' urls.txt
  • /\/$/ { print > "folders.txt"; next } 如果一行以 / 结尾,将其写入 folders.txt 并跳过下一行
  • { print > "files.txt" } 将所有其他行写入 files.txt

如果您的文件中有尾随空格,则可以使用表达式 /\/[[:space:]]*$/ 替代 /\/$/


2
你所需要的是:

以下内容即可:

awk '{print > ((/\/$/ ? "folders" : "files")".txt")}' urls.txt

0

通过 coreutils、grep 和 bash 进程替换:

<urls tee >(grep '/$' > folders.txt) >(grep -v '/$' > files.txt) > /dev/null

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接