我创建了一个脚本来从网站中提取一些链接。我的脚本通过提取管道后的最新文本,将"é"替换为"e"。然而,在执行时,它会剥离第一行
#!/bin/bash
input="links"
while IFS= read -r line
do
awk -F "/" ' { print $6} ' | iconv -f utf8 -t ascii//TRANSLIT//IGNORE > output_downloads.txt
done < "$input"
文件链接
https://DOMAIN.tv/video/9462/sortilégio-capitulo-1
https://DOMAIN.tv/video/9463/sortilégio-capitulo-2
头输出下载.txt
sortilegio-capitulo-2
sortilegio-capitulo-3
sortilegio-capitulo-4
sortilegio-capitulo-5
我不明白为什么——考虑到源文件中的所有行都是相似的。你知道吗?
其他问题:
- 与其对最后一个'/'的数字进行硬编码,我如何才能通用地提取它
- 我也想要一些填充物——我找到了这种方法
printf "%04dn
但只有当格式仅为数字时,它才有效。
有什么想法吗?
谢谢!!
完全去掉while read
循环。该循环一次一行地将内容读取到shell中。
但是,在您的使用模式中,read
只运行一次,消耗第一行并将其存储在$line
中;所有其他行仍然可供awk读取——因此,awk在一次运行该循环时,读取所有其他行,将第6列写入其stdout,然后iconv
读取。当while read
循环再次评估其条件时,read
失败(因为awk
读取了所有可用的输入,并且没有剩余的内容(,因此循环退出。
因为第一行被read line
占用,所以awk
无法看到它——这就是为什么它永远不会出现在您的输出中。
awk -F "/" ' { print $6} ' <"$input"
| iconv -f utf8 -t ascii//TRANSLIT//IGNORE
> output_downloads.txt
您的awk单独工作:
#!/bin/bash
awk -F "/" ' { print $NF} ' links | iconv -f utf8 -t ascii//TRANSLIT//IGNORE > output_downloads.txt
您可以使用$NF而不是$6