Здесь есть две основные ошибки:
После того, как вы отредактировали данные, вы могли бы сделать то, о чем, я думаю, вы просите, вот так:
% grep "SOUTH AFRICA" file | sort "-t;" -k5n
(при условии, что «файл» содержит ваши данные). Это дает следующий результат:
25 QUEENS ROAD SOUTH;SOUTH AFRICA;1;900;400000;3
35 EAST 23rd Street SOUTH AFRICA;5;600;5000000;6
83 NORTH YELLOWLIGHT AVENUE;SOUTH AFRICA;4;700;7000000;5
Если вы хотите убедиться, что ЮЖНАЯ АФРИКА находится только во втором столбце, вы можете сделать это следующим образом:
% awk '-F;' '$2 == "SOUTH AFRICA"' file | sort '-t;' -k5n
Замена {}
выполняется на find
и происходит после оценки замены процесса(<(…)
)и т.п. в вашем коде.
Использованиеbash -c
:
find datadir -type f -exec \
bash -c 'sdiff -s <( sort "$1" ) <( sort "/$1" )' bash {} \;
Или чтобы избежать запуска одного bash
экземпляра на файл:
find datadir -type f -exec bash -c '
for file do
sdiff -s <( sort "$file" ) <( sort "/$file" )
done' bash {} +
Вы можете рассмотреть вариант-r
(recursive ), который выполняет всю сортировку и рекурсию за вас.