Здесь у вас есть четыре уровня интерпретации (perl, shell, awk, shell). Команда сортировки оболочки:
awk 'NR == 1; NR > 1 { print $0 | "sort -T $TMPDIR -k1,1" }' test > test.sort
так $TMPDIR
расширяется внутренней оболочкой. Очевидно, на вашем настольном компьютере есть переменная окружения с таким именем, но не на другом. Лучшее решение - сделать TMPDIR
переменной среды и правильно заключить ее в кавычки (расширение ее из Perl вызовет проблемы, если ее значение содержит символы, которые должны быть защищены от расширения awk или оболочки).
$ENV{TMPDIR} = "/home/xyz/workspace/";
my $sortCommand = "awk 'NR == 1; NR > 1 { print \$0 | \"sort -T \\\"\$TMPDIR\\\" -k1,1\" }' test > test.sort";
Странно так сильно полагаться на внешние инструменты из Perl-программы. Хорошо, если sort
переполняет /tmp
, тогда встроенному в Perl sort
, скорее всего, не хватит памяти. Так что используйте Sort :: External .