Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何读取一行以计算md5_Bash_Shell_Md5sum - Fatal编程技术网

Bash 如何读取一行以计算md5

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

我使用的是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
这种编码在大多数情况下都能很好地工作

但是,如果单行以单/双制表符结尾,则后面的制表符将消失

因此,由于缺少选项卡,输出_文件有时会包含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