Unix::AWK意外删除了第一行



我创建了一个脚本来从网站中提取一些链接。我的脚本通过提取管道后的最新文本,将"é"替换为"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

我不明白为什么——考虑到源文件中的所有行都是相似的。你知道吗?

其他问题:

  1. 与其对最后一个'/'的数字进行硬编码,我如何才能通用地提取它
  2. 我也想要一些填充物——我找到了这种方法
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

最新更新