Bash: use Exec найдите опцию, сортируя два аргумента файлов

Здесь есть две основные ошибки:

  1. Содержимое, которое вы ему дали, не имеет разделителей полей, поэтому "столбец 5" не имеет смысла. Вам придется отредактировать данные (используя, например, точку с запятой между столбцами), чтобы придать значимость понятию «столбец». Обычно я использую табуляции в качестве разделителей столбцов, но вы можете использовать любой символ, которого нет в данных.
  2. Вам нужно указать sort, что такое разделитель полей.

После того, как вы отредактировали данные, вы могли бы сделать то, о чем, я думаю, вы просите, вот так:

% 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
4
07.08.2018, 18:41
2 ответа

Замена {}выполняется на 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 {} +
10
27.01.2020, 20:47

Вы можете рассмотреть вариант-r(recursive ), который выполняет всю сортировку и рекурсию за вас.

1
27.01.2020, 20:47

Теги

Похожие вопросы