(примечание: этот ответ был написан до того, как вопрос был обновлен с помощью команды join
и сообщений об ошибках)
команда называется соединением
.
со страницы руководства:
join - объединить строки двух файлов в общем поле
, так как ваши входные файлы не отсортированы, вам нужно сначала отсортировать их
join <(sort file1) <(sort file2)
вещи называются подстановкой процессов и поддерживаются bash и некоторыми другими оболочками. если у вас есть оболочка, которая не поддерживает подстановку процессов, вам придется работать с промежуточными файлами.
join
является частью gnu coreutils, поэтому его следует устанавливать в большинстве распространенных систем GNU / Linux.
( Это должен быть комментарий, но он слишком большой.)
Для тех, кто любит экспериментировать:
Создайте скрипт со списком переданных позиционных параметров, назовите его list_positional_parameters.sh
.
#!/bin/bash
# http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_07.html
# Try globbing patterns, e.g. "X[[:digit:]][[:digit:]]" to see what happens
if [ $# -lt 1 ]; then
echo "Usage: $0 and then at least one parameter"
exit 1
fi
counter=1
while (($#)); do
echo "$counter = '$1'"
# pop positional argument 1 off the stack of positional arguments
shift
(( counter++ ))
done
Запустите find
с ним в каком-нибудь каталоге $dir:
find "$dir" -exec./list_positional_parameters.sh '{}' ';' | less
Как и ожидалось, во всех вызовах есть только один параметр — имя файла, независимо от того, есть ли в его имени пробелы или нет.