В вашем выражении
"cat my.log | grep @ | tail -n 1 | awk '{ print $3 }'"
...двойные -кавычки вокруг этой строки означают, что одинарные -кавычки рассматриваются как литералы. Они не защищают $3
от оболочки, поэтому он расширяется как переменная среды. Поскольку $3
на самом деле не определяется оболочкой (, если это не находится в сценарии, который вы вызвали с 3 аргументами ), он становится пустой строкой, а выражение awk
просто { print }
, печать всей строки.
Это можно исправить, выйдя из$
:
ls *.csv | xargs -I@ bash -c "cat my.log | grep @|tail -n 1|awk '{print \$3}'"
...или переместив awk
из выражения xargs
:
ls *.csv | xargs -I@ bash -c "cat my.log | grep @|tail -n 1"|awk '{print $3}'