使用awk获取列值,然后对值运行另一个命令并打印它们

时间:2013-07-18 14:16:17

标签: unix hash scripting awk

我一直使用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

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

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

2 个答案:

答案 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