while循环跳过输出中的第一行

问题描述 投票:0回答:1

我在Mac上的终端中使用以下命令来读取电子邮件地址文件并将其转换为MD5哈希。

tr -d " " < em.txt | tr '[:upper:]' '[:lower:]' | while read line; do 
(echo -n $line | md5); done | awk '{print $1}' > hashes1.txt

这将生成一个比原始输入文件短1行的哈希文件。但我无法弄清楚为什么。

这段代码做了一些事情,如下。

  1. 将电子邮件地址转换为全部小写
  2. 将电子邮件地址转换为MD5哈希
  3. 将新电子邮件地址列表输出到hashes1.txt文件

提前致谢!

unix hash while-loop
1个回答
1
投票

你的命令是错误的:它应该是:

tr -d " " < em.txt |
    tr '[[:upper:]]' '[[:lower:]]' |
    while IFS= read -r line; do 
        echo -n "$line" | md5 | awk '{print $1}' >> hashes1.txt
    done

要么

while IFS= read -r line; do 
    echo -n "$line" | md5 | awk '{print $1}' >> hashes1.txt
done < <(tr -d " " < em.txt | tr '[[:upper:]]' '[[:lower:]]')

也改变了文件馈送位置。

并确保您的文件没有奇怪的字符

od -c file

如果是,请安装dos2unix,然后:

dos2unix file

或使用

perl -i -pe 's/\r//g' file
© www.soinside.com 2019 - 2024. All rights reserved.