Isso parece um problema de citação. Talvez a maneira mais fácil de depurar isso seja passar a opção --dry-run
para paralelo:
$ parallel --dry-run "awk -F '\t' -v OFS='\t' '$1 { if($3 !~ /needle/){print;} ;}' {} > {}.output" ::: in
awk -F '\t' -v OFS='\t' ' { if( ~ /needle/){print;} ;}' in > in.output
Lá você pode ver que suas variáveis $1
e $3
desapareceram e que !~
foi expandido para ~
(no meu caso). Todos aqueles que têm um significado especial para o shell bash, e devem ser protegidos se forem para o awk. Em vez disso, tente o seguinte (eu também alterei o script awk para ajustar sua descrição):
parallel awk -F '\t' -vOFS='\t' $'\'($3 !~ /needle/) { print }\'' \>{}.output {} ::: *.txt
A razão pela qual essas expansões ocorreram é que os tokens estavam entre aspas duplas (eles estão entre aspas simples entre aspas duplas, mas o shell apenas se preocupa com as aspas externas).
Note que eu também evito analisar a saída de ls
.