Попробуйте это,
join <(sort -r file2.csv) <(sort -r file1.csv) > file3.csv
В оболочке Unix символ>>
(больше больше )может использоваться для добавления к файлу, например.
command >> file.txt
Итак, я нашел это буквально через несколько минут после публикации.
Ответ: заменить >
на >>
С синтаксисом:
foo bar >> output.txt
foo bar1 >> output.txt
foo bar2 >> output.txt
Одно >
для записи в файл.
Двойной >
должен добавляться к файлу.
В последних двух командах вам нужно использовать >>
вместо >
, что добавляет содержимое, а не полностью заменяет его, как это делает >
.
Каждая из трех отдельных команд очищает файл output.txt
перед записью в него новых данных. Вот почему в конечном итоге файл содержит только данные последней выполненной команды.
Чтобы перенаправить набор команд в файл, вы можете использовать
{
foo bar
foo bar1
foo bar2
} >output.txt
или в одной строке
{ foo bar; foo bar1; foo bar2; } >output.txt
Фигурные скобки определяют составную команду . Перенаправление после завершения }
перенаправляет весь вывод составной команды в целом.
Поскольку мы используем >
, файл будет очищен до того, как вывод составной команды будет записан в файл output.txt
. Если вы хотите добавить в файл, используйте вместо этого >>
.
Другой вариант:
for operand in bar bar1 bar2; do
foo "$operand"
done >output.txt
или, в оболочке с распорками,
for operand in bar{,1,2}; do
foo "$operand"
done >output.txt
Здесь цикл for
представляет собой составную команду, которая может быть перенаправлена так же, как составная команда { ...; }
выше.
Опять же, если вы хотите сохранить исходное содержимое output.txt
и добавить только к файлу, используйте для перенаправления >>
, а не >
.