Ответ 1
Должен ли файл2 содержать LUA
в конце?
Если да, вы все равно можете использовать join
:
join -t'|' -12 <(sort -t'|' -k2 file1) file2
Глядя на выполнение внутреннего соединения на двух разных текстовых файлах. В основном я ищу внутренний эквивалент совместной программы GNU join. Существует ли такая вещь? В противном случае решение awk
или sed
было бы наиболее полезным, но мой первый выбор был бы командой Linux.
Вот пример того, что я хочу сделать
файл 1:
0|Alien Registration Card LUA|Checklist Update
1|Alien Registration Card LUA|Document App Plan
2|Alien Registration Card LUA|SA Application Nbr
3|Alien Registration Card LUA|tmp_preapp-DOB
0|App - CSCE Certificate LUA|Admit Type
1|App - CSCE Certificate LUA|Alias 1
2|App - CSCE Certificate LUA|Alias 2
3|App - CSCE Certificate LUA|Alias 3
4|App - CSCE Certificate LUA|Alias 4
файл 2:
Alien Registration Card LUA
Результаты:
0|Alien Registration Card LUA|Checklist Update
1|Alien Registration Card LUA|Document App Plan
2|Alien Registration Card LUA|SA Application Nbr
3|Alien Registration Card LUA|tmp_preapp-DOB
Должен ли файл2 содержать LUA
в конце?
Если да, вы все равно можете использовать join
:
join -t'|' -12 <(sort -t'|' -k2 file1) file2
Вы можете изменить этот script:
cat file2 | while read line; do
grep $line file1 # or whatever you want to do with the $line variable
done
while цикл считывает файл2 по строкам и передает эту строку команде grep, которая разделяет эту строку в файле1. Есть некоторые дополнительные выходные данные, которые могут быть удалены с помощью параметров grep.
Здесь опция awk, поэтому вы можете избежать зависимости bash (для переносимости):
$ awk -F'|' 'NR==FNR{check[$0];next} $2 in check' file2 file1
Как это работает?
-F'|'
- устанавливает разделитель полей'NR==FNR{check[$0];next}
- если общий номер записи соответствует номеру записи файла (т.е. мы читаем первый предоставленный файл), мы заполняем массив и продолжаем.$2 in check
- Если второе поле было упомянуто в созданном массиве, напечатайте строку (это действие по умолчанию, если никаких действий не предусмотрено).file2 file1
- файлы. Порядок важен из-за конструкции NR==FNR
.Похоже, вам просто нужно
grep -F -f file2 file1
Вы можете использовать команду вставки для объединения файла:
paste [option] source files [>destination file]
для вашего примера это будет
paste file1.txt file2.txt >result.txt