Запутался в соглашении об именах переменных в сценариях оболочки

Предполагая, что bashиспользуется (, в противном случае предварительно -отсортируйте входные файлы с помощью sort -o List1 List1и sort -o List2 List2и используйте List1 List2вместо подстановок процесса):

$ join -t, -v1 <( sort List1 ) <( sort List2 )
2,name2
4,name4
5,name5
8,name8
9,name9

Это выполняет реляционную операцию JOIN между вашими двумя файлами, сначала сортируя их содержимое. -t,указывает joinрассматривать запятые как разделитель полей, а с помощью -v1мы запрашиваем записи в первом файле, которые не соединяются ни с одной записью во втором. Объединение происходит по умолчанию в первом поле каждого файла.

Чтобы убрать последнее целое число из этого:

join -t, -v1 <( sort List1 ) <( sort List2 ) | sed 's/[0-9]*$//'

Для решения MySQL вам пришлось бы предоставить схему SQL для задействованных таблиц, но результирующий запрос выглядел бы примерно так

SELECT * FROM table1 WHERE joinfield1 NOT IN (SELECT joinfield2 FROM table2);
0
10.08.2020, 10:25
1 ответ

Переменные среды и встроенные -переменные оболочки, вводимые операционной системой, сценариями запуска оболочки или самой оболочкой и т. д., обычно пишутся ЗАГЛАВНЫМИ БУКВАМИ, но это не обязательно. Оболочке все равно.

Некоторые утверждают, что для предотвращения возможного конфликта ваших собственных переменных сценария оболочки с этими переменными и переопределения их значений рекомендуется использовать строчные буквы для переменных оболочки, но опять же это не является обязательным. Оболочке все равно.

В последние годы сторонники «использовать строчные буквы для имен переменных оболочки» набрали обороты, но, опять же, оболочке все равно, и она остается агностикой.

1
18.03.2021, 23:13

Теги

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