Bash 在awk中运行md5sum命令

Bash 在awk中运行md5sum命令,bash,awk,Bash,Awk,我在awk中运行md5sum以查找相同的文件: ls -lS | awk 'BEGIN { getline;getline; name1=$9;size1=$5 } { name2=$9;size2=$5; if (size1==size2) { cmd1="md5sum "name1 cmd2="md5sum "name2 cmd1 | getline; sum1=$1 cmd2 | get

我在awk中运行md5sum以查找相同的文件:

    ls -lS | awk 'BEGIN {
    getline;getline;
    name1=$9;size1=$5
}
{
    name2=$9;size2=$5;
    if (size1==size2) {
        cmd1="md5sum "name1
        cmd2="md5sum "name2
        cmd1 | getline; sum1=$1
        cmd2 | getline; sum2=$1
        print sum1,sum2
        if (sum1 == sum2) {
            print name1;print name2
        }
    };
    name1=name2;size1=size2
}'
  • 我的shell的输出是:
  • b1946ac92492d2347c6235b4d2611184 b1946ac92492d2347c6235b4d2611184
    测试
    测试cpy1
    -rw-rw-r--b1946ac92492d2347c6235b4d2611184

    您可以看到有一个md5sum不正确…但是如果我将两个cmd行序列更改为:

    cmd2 | getline; sum2=$1 
    cmd1 | getline; sum1=$1
    
    输出是正确的。我很困惑

    b1946ac92492d2347c6235b4d2611184 b1946ac92492d2347c6235b4d2611184
    test
    test_cpy1
    b1946ac92492d2347c6235b4d2611184 b1946ac92492d2347c6235b4d2611184
    test_cpy1
    test_cpy2
    

    好的,我发现我需要关闭cmd:

    cmd1 | getline; print name1,$0;sum1=$1;
    close(cmd1)
    cmd2 | getline; print name2,$0;sum2=$1;
    close(cmd2)
    
    发件人:

    一次只能打开一个管道。如果要打开另一个管道,则必须执行

    close("command");