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

Chr*_*een 8 bash awk

我有一个URL列表,并希望确定什么是目录,什么不是:

https://www.example.com/folder/
https://www.example.com/folder9/
https://www.example.com/folder/file.sh
https://www.example.com/folder/text
Run Code Online (Sandbox Code Playgroud)

我可以grep -e /$用来查找哪个,但是我想做一个内联命令,我可以根据该逻辑重定向输出.

我知道awk可能在这里有答案,但是在awk中没有足够的经验来做到这一点.

就像是:

cat urls | if /$ matches write to folders.txt else write to files.txt
Run Code Online (Sandbox Code Playgroud)

我可以把它全部放到一个文件然后读两遍但是当它到达数千行时我觉得效率低下.

cod*_*ter 6

是的,这awk是一个很好的选择:

awk '/\/$/ { print > "folders.txt"; next }
           { print > "files.txt" }' urls.txt
Run Code Online (Sandbox Code Playgroud)
  • /\/$/ { print > "folders.txt"; next } 如果该行以/结尾,则将其写入folders.txt并跳至下一行
  • { print > "files.txt" } 将所有其他行写入files.txt

您可能希望使用表达式,/\/[[:space:]]*$/而不是/\/$/在文件中有尾随空格的情况下.