繁体   English   中英

Unix :: AWK 意外删除第一行

[英]Unix :: AWK removed unexpectedly first line

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

头部 output_downloads.txt

sortilegio-capitulo-2
sortilegio-capitulo-3
sortilegio-capitulo-4
sortilegio-capitulo-5

我不明白为什么 - 考虑到源文件中的所有行都是相似的。 有什么想法吗?

其他问题:

  1. 而不是硬编码最后一个'/'的数量,我怎么能一般地提取它?
  2. 我也想要一些填充物 - 我找到了这种方式来做到这一点
printf "%04d\n

但只有在格​​式仅为数字时才有效。

请问有什么想法吗?

谢谢 !!

完全去掉while read循环。 该循环一次一行地将内容读入 shell

但是,在您的使用模式下, read only 运行一次,使用第一行并将其存储在$line 所有其他行仍然可供 awk 读取——因此,当 awk 运行一次该循环时,读取所有其他行,将第 6 列写入其标准输出,然后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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM