While循环跳过输出的第一行

时间:2018-08-29 18:50:23

标签: unix hash while-loop

我在Mac上的Terminal中使用以下命令来读取电子邮件地址文件,并将其转换为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文件

谢谢!

1 个答案:

答案 0 :(得分: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