0

我一直使用 Stack Overflow 来解决问题,但这是我的第一篇文章。我是 UNIX 脚本的新手,我被分配了一项任务来获取第二列的值,然后对它们运行命令。我想运行的命令是 'echo -n "$2" | openssl dgst -sha1;' 这是一个散列值的函数。我的问题不是散列一个值,而是将它们全部散列然后打印它们。有人可以帮我解决这个问题吗?这就是我开始的方式,但我认为我要走的路是错误的。

注意:这是一个 CSV 文本文件,我知道我需要为此使用 AWK 命令。

awk 'BEGIN { FS = "," } ; { print $2 }'
     while [ "$2" != 0 ];
     do
         echo -n "$2" | openssl dgst -sha1
     done

这将完整打印第二列,并打印某种类型的散列值。

抱歉,第一篇文章很长,只是想尽可能具体。谢谢!

4

2 回答 2

2

你真的不需要awk只提取第二列。您可以使用bash内置的 read 并将 设置IFS为分隔符。

while IFS=, read -ra line; do
[[ ${line[1]} != 0 ]] && echo "${line[1]}" | openssl dgst -sha1
done < inputFile

您可能应该发布一些示例输入数据和您遇到的错误,以便有人可以更好地调试您现有的代码。

于 2013-07-18T14:20:38.173 回答
1

这可以解决问题:

$ awk '{print $2}' file | xargs -n1 openssl dgst -sha1

用于awk打印文件中的第二个字段,并xargs使用-n1将每条记录分别传递给openssl.

如果CSV您的意思是每条记录都用逗号分隔,那么您需要添加-F,awk.

$ awk -F, '{print $2}' file | xargs -n1 openssl dgst -sha1
于 2013-07-18T14:21:38.897 回答