我一直使用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
这将完整打印第二列,并打印某种类型的散列值。
很抱歉第一篇文章很长,只是想尽可能具体。谢谢!
答案 0 :(得分:2)
仅提取第二列并不需要awk
。您可以使用内置的bash
读取并将IFS
设置为分隔符。
while IFS=, read -ra line; do
[[ ${line[1]} != 0 ]] && echo "${line[1]}" | openssl dgst -sha1
done < inputFile
你应该发布一些示例输入数据和你得到的错误,以便有人可以更好地调试你现有的代码。
答案 1 :(得分: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