Bash 如何读取一行以计算md5
我使用的是LinuxBash版本4.1.2 我有一个以制表符分隔的输入文件,有5个字段,我想计算每行的MD5,并将md5sum放在每行的末尾 因此,预期的输出_文件每行应有6个字段 这是我的代码:Bash 如何读取一行以计算md5,bash,shell,md5sum,Bash,Shell,Md5sum,我使用的是LinuxBash版本4.1.2 我有一个以制表符分隔的输入文件,有5个字段,我想计算每行的MD5,并将md5sum放在每行的末尾 因此,预期的输出_文件每行应有6个字段 这是我的代码: cat input_file | while read ONELINE do THEMD5=`echo "$ONELINE" | md5sum | awk '{print $1}'` echo -e "${ONELINE}\t${THEMD5}" done > output_file
cat input_file | while read ONELINE
do
THEMD5=`echo "$ONELINE" | md5sum | awk '{print $1}'`
echo -e "${ONELINE}\t${THEMD5}"
done > output_file
这种编码在大多数情况下都能很好地工作
但是,如果单行以单/双制表符结尾,则后面的制表符将消失
因此,由于缺少选项卡,输出_文件有时会包含4行或5行字段
我已尝试在while
语句中添加IFS=
或IFS=$'\n'
或IFS-$'\012'
,但仍然无法解决问题
请帮忙
Alvin SIU如果您希望MD5SUMMS中包含尾随换行符(如原始代码所示),那么以下内容肯定是正确的:
而IFS=read-r行;做
read sum<<如果您有这个没有解决的问题,您需要提供一个SSCE来演示它——在这种情况下,修改脚本以生成自己的输入就足够了。例如:<请参阅完整MCVE的示例,包括(工作!)输入数据。谢谢Charles!代码是有效的。我的bash无法使用[[[read sum]]]语句。我必须使用语句[[[read sum@alvinsu,确切地说,您正在运行哪个版本的bash?这里的所有内容都通过3.x系列得到支持。@alvinsu,…,因此,只要您的shell确实是bash(而不是/bin/sh
),我希望打字错误或转录错误比真正的不兼容更容易发生。您复制并粘贴了吗?@alvinsu,…如果您复制并粘贴了错误,请检查您使用的是!/bin/bash
,而不是!/bin/sh
,或者bash scriptname
而不是sh scriptname
@alvinsumg、 也就是说,您在一个真正的UNIX平台上,没有使用Git Bash——如果是后者,我建议升级一个当前版本(从),它不再基于古老的、有缺陷的mingw构建。
while IFS= read -r line; do
read sum _ < <(printf '%s\n' "$line" | md5sum -)
printf '%s\t%s\n' "$line" "$sum"
done <input_file