Unix While循环跳过输出中的第一行

Unix While循环跳过输出中的第一行,unix,hash,while-loop,tr,perl,Unix,Hash,While Loop,Tr,Perl,我在Mac上的终端中使用以下命令读取电子邮件地址文件,并将其转换为MD5哈希 tr -d " " < em.txt | tr '[:upper:]' '[:lower:]' | while read line; do (echo -n $line | md5); done | awk '{print $1}' > hashes1.txt 这将生成一个比原始输入文件短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行的哈希文件。但我不明白为什么

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

将电子邮件地址转换为所有小写字母 将电子邮件地址转换为MD5哈希 将新电子邮件地址列表输出到hashes1.txt文件 提前谢谢

您的命令错误:应该是:

tr -d " " < em.txt |
    tr '[[:upper:]]' '[[:lower:]]' |
    while IFS= read -r line; do 
        echo -n "$line" | md5 | awk '{print $1}' >> hashes1.txt
    done
如果是,请安装dos2unix,然后:

或使用:


谢谢当我使用该脚本时,它仍然会缩短1行。但这次它切断了最后一行。我可以看出它正在切断最后一行,因为我删除了| md5以进行检查,并且最后一封电子邮件已被切断。请尝试使用od-c文件查看是否没有奇怪的字符,如windows行结尾\r\n:如果是这样,请更改它:dos2unix文件是的,您是对的。该文件已被删除\r\n。但是,当我尝试使用dos2unix时,会出现以下错误bash:dos2unix:command not found。有什么建议吗?或者使用:perl-i-pe's/\r//g'文件谢谢。不幸的是,我在尝试安装brew时遇到此错误-找不到bash:brew:命令。但还有一个问题。如果我删除“\r\n”,那么我的文本文件会变成一个长文本字符串而不是单独的电子邮件地址吗?
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 file
perl -i -pe 's/\r//g' file