执行SHA2时,Awk命令花费太多时间来执行多个文件

时间:2018-12-20 16:15:52

标签: linux awk sha256

我试图同时在多个文件上运行awk sha2命令,但是它花费了很多时间。文件包含5lacs行,我将第一列转换为SHA2。这是我的代码

output="-SHA2.txt"
FILES="${filePath}/*"
for f in $FILES
  do
        echo $f
        awk -F '\\[\\^' 'BEGIN {OFS = "[^"}
        NR==1; NR>1{
        tmp="echo -n "$1" | sha256sum | cut -f1 -d\" \""
        tmp | getline cksum
        $1=cksum;
        print $0;
        close(tmp)
        }' $f > $f$output &
  done

此代码花费太多时间超过2小时才能打印174个文件。每个都有50万行。

2 个答案:

答案 0 :(得分:0)

而不是每个输入文件调用awk:

for f in *; do
    awk '{print}' "$f" > "${f}.${sfx}"
done

尝试一次调用awk:

awk -v sfx="$sfx" 'FNR==1{close(out); out=FILENAME"."sfx} {print > out}' *

顺便说一下:

    tmp="echo -n "$1" | sha256sum | cut -f1 -d\" \""
    tmp | getline cksum
    $1=cksum;
    print $0;
    close(tmp)

应该这样写,以提高鲁棒性:

    cmd = "printf \047" $1 "\047 | sha256sum"
    if ( (cmd | getline cksum) > 0 ) {
        split(cksum,arr)
        $1 = arr[1]
    }
    else {
        print "Failed to get checksum" | "cat>&2"
    }
    close(cmd)
    print

答案 1 :(得分:0)

我在将closegetline一起使用时遇到了很多问题。如果close被删除,那么它很快。但是在这种情况下,getline无法正常工作。

相关问题