Bash 在awk中运行md5sum命令
我在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
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
}'
测试
测试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");