Использование awk:
awk -F\| 'NR==FNR{ids[$1]=1;next}ids[$1]==1' file1 file2
Редактировать - добавить объяснения:
Блок после NR == FNR выполняется при анализе первого файла.Он создает массив с именем «идентификаторы».Когда awk завершил анализ первого файла, массив:
ids[1] = 1
ids[2] = 1
ids[3] = 1
ids[4] = 1
ids[5] = 1
вызывается 'next', чтобы избежать выполнения остальной части скрипта (при разборе первого файла)
ids[$1]==1
будетпроверьте для каждой строки второго файла, если ids [value_inside_first_column] равен 1, затем печатает строку.
Это эквивалентно:
awk -F\| '
NR==FNR{
ids[$1]=1
}
NR!=FNR{
if(ids[$1]==1){
print $0
}
}'
Для развлечения с помощью grep, но я предпочитаю версии awk или join:
grep -wF -f file1 file2
Решение grep работает на вашем примере, но оно нестабильно, поскольку оно будет печатать такие строки:
B|eee|ee||||||1|||||city23|st11|st22|st33|st55
Имейте в виду, что выв вашем примере file1 есть лишние пробелы, которые приводят к непредвиденным ошибкам.