У меня есть 2 файла CSV следующим образом

AllEmpployees.txt
EmpID,Name

QualifiedEmployeees.csv
Empid

Теперь я хочу найти имена квалифицированных сотрудников

Empid,Name

Я использую следующую команду

   join -t , -1 1 -2 1 QualifiedEmployeees.csv AllEmployees.txt

Это приводит к нулю записей. Уверен, что есть пересечение идентификаторов сотрудников.

Ссылка: https://superuser.com/questions/26834/how-to-join- два CSV-файла

Это потому, что в файле квалифицированных сотрудников только один столбец и нет разделителя? Или я что-то делаю не так

1
user93796 20 Апр 2016 в 07:40

3 ответа

Лучший ответ

Попробуй это:

join -t "," <(dos2unix <QualifiedEmployeees.csv) <(dos2unix <AllEmpployees.txt)
2
Cyrus 20 Апр 2016 в 05:21
awk -F, 'FNR==NR{a[$1];next}($1 in a){print $2}' Qualiedemployees.txt allEmployees.txt
0
Vijay 20 Апр 2016 в 05:51

Если join не работает (не производит столько строк, сколько вы ожидаете, или их нет вообще), скорее всего, ваш ввод не отсортирован. Из man join мы видим следующее:

Когда используются символы-разделители полей по умолчанию, файлы, которые необходимо объединить, должны быть упорядочены в последовательности сортировки sort (1) с использованием параметра -b в полях, в которых они должны быть объединены, в противном случае объединение не может сообщать обо всех совпадениях полей. Если символы-разделители полей указаны с помощью опции -t, последовательность сортировки должна быть такой же, как sort (1), без опции -b.

0
John Zwinck 20 Апр 2016 в 05:11