我有一个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
我可以将所有内容放到一个文件中,然后读取两次,但是当到达数千行时,我觉得效率很低。
答案 0 :(得分:6)
是的,awk
是一个很好的选择:
awk '/\/$/ { print > "folders.txt"; next }
{ print > "files.txt" }' urls.txt
/\/$/ { print > "folders.txt"; next }
,如果该行以/结尾,则将其写入folder.txt,然后跳至下一行{ print > "files.txt" }
将所有其他行写入files.txt 如果文件中有尾随空格,则可能要使用表达式/\/[[:space:]]*$/
而不是/\/$/
。
答案 1 :(得分:2)
您需要的是:
awk '{print > ((/\/$/ ? "folders" : "files")".txt")}' urls.txt
答案 2 :(得分:0)
使用coreutils,grep和bash进程替换:
<urls tee >(grep '/$' > folders.txt) >(grep -v '/$' > files.txt) > /dev/null