фильтровать CSV-файл на основе списка идентификаторов в другом файле

Есть ответ о создании файлов в sysfsна stackoverflow . Они просты в обращении и по умолчанию должны быть доступны без root-прав.

-1
24.10.2019, 02:53
3 ответа

Если файлы имеют общие строки в одном порядке,

join -t, -j1 file1.txt file2.txt

Пояснение

Для получения дополнительной информации см. man join. По сути, joinдва файла, пропуская «непарные строки». Разделителем является запятая -t,и соединение в поле 1 -j1.

2
28.01.2020, 05:08

Использование csvjoinиз Python -на основе csvkit

$ csvjoin -Ic id file\ 1 file\ 2
id,ICD,CT
16214497,008.8,1
27154870,780.79,1

Флаг -Iотключает вывод типа, поэтому поля, подобные 008.8, обрабатываются как строки, а не как числовые (, что может вызвать повторное -форматирование ). Этот метод прозрачно обрабатывает окончания строк в стиле DOS/Windows.


Альтернативное быстрое соединение с использованием awk:

awk -F, 'NR==FNR {a[$1]; next} $1 in a' file\ 2 file\ 1

Если в вашем файле есть окончания строк DOS/Windows (CRLF вместо обычного LF ), вы можете попробовать

awk -vRS='\r\n' -F, 'NR==FNR {a[$1]; next} $1 in a' file\ 2 file\ 1

или сначала конвертируйте файл, используя dos2unix, tr, sedи т. д.

1
28.01.2020, 05:08

С grepиsed:

Вы можете добавить ^в начало каждой строки и ,в конец каждой строки файла2 и использоватьgrep:

grep -f <(sed 's/^/^/;s/$/,/' file2) file1

Опция -fсчитывает шаблоны из файла (в нашем примере не из реального файла, а из подстановки процесса<(…)).

0
28.01.2020, 05:08

Теги

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