2016-08-30 3 views
1

Ich benutze oft Makefiles für die Automatisierung von Aufgaben, die ich wiederhole. Bei einer Aufgabe wird beispielsweise ein wachsendes Dataset nach Übereinstimmungen mit regulären Ausdrücken durchsucht. Angenommen, ich habe die folgenden zwei Textdateien, search1.txt und search2.txt:Simple Makefile zum Automatisieren paralleler grep gibt einen Fehler zurück

search1.txt:

DSADJKBSDJSA 
TEST1 
DJKSABVDJSA 

search2.txt:

hvdsjhavdjshavdsa 
dsadsadsadsa 
TEST3djsabdjhsavdjhsa 
TEST2dsajdbsahjdvsa 

Hier ist meine Makefile suchen diese parallel mit GNU parallel.

.PHONY: search 
search: 
    find search*.txt | parallel grep TEST1 {} 
    find search*.txt | parallel grep TEST2 {} 

Als ich make search laufen, die erste Zeile gibt die richtigen Daten und wirft dann einen Fehler und beendet wird, trotz der Tatsache, dass beide Linien auf ihre eigenen kompletten ganz gut läuft.

> make search 
find *.txt | parallel grep TEST1 {} 
TEST1 
make: *** [search] Error 1 
> find *.txt | parallel grep TEST1 {} 
TEST1 
> find *.txt | parallel grep TEST2 {} 
TEST2dsajdbsahjdvsa 
> parallel --version 
GNU parallel 20160822 

Ich kann nicht für das Leben von mir herauszufinden, was ich falsch mache. Es muss etwas Offensichtliches sein, aber ich habe dies auf ein so kleines einfaches Beispiel heruntergerechnet und ich bin immer noch verwirrt darüber, warum dies geschieht. Danke für jede Hilfe, die ich bekomme!

Antwort

1

Ah ha! Ich habe es herausgefunden. Es stellt sich heraus, dass grep einen Exit-Status hat, der dies verursacht. Aus dem grep Manpages:

EXIT STATUS 
    The grep utility exits with one of the following values: 

    0  One or more lines were selected. 
    1  No lines were selected. 
    >1 An error occurred. 

Da einige der Dateien bin auf der Suche Ich werde das Spiel nicht enthalten, wird grep einen Exit-Status von 1. zurückgeben eine ziemlich einfache Lösung Dies hat:

.PHONY: search 
search: 
    find search*.txt | parallel grep TEST1 {} || true 
    find search*.txt | parallel grep TEST2 {} || true 
Verwandte Themen