2013-10-13 3 views
2

я бегу md5sum в AWK, чтобы найти тот же файл:выполнять команды md5sum в AWK

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 
}' 
  1. выход моей оболочки является:

b1946ac92492d2347c6235b4d2611184 b1946ac92492d2347c6235b4d2611184
тест
test_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 

ответ

2

Хорошо, я считаю, что мне нужно, чтобы закрыть ЦМД:

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

От: http://www.gnu.org/software/gawk/manual/html_node/Getline_002fPipe.html#Getline_002fPipe

Только одна труба может быть открыта в то время. Если вы хотите открыть другую трубу, вы должны выполнить

close("command"); 
Смежные вопросы