Вы можете использовать decorate - filter - undecorate pattern:
paste fileA fileB | grep -v '0$' | cut -f1
Это печатает строки каждого файла рядом друг с другом (paste
), затем фильтрует строкизаканчивающийся на 0
(grep
), затем удаляет строки из второго файла (cut
).
Это прерывание, если fileA
содержит разделитель, используемый для paste
и cut
(вкладка по умолчанию).Чтобы избежать этого, мы могли бы либо поменять местами файлы (см. ответ codeforester ), либо прибегнуть к чему-то вроде
paste fileA fileB | sed -n '/1$/s/\t.$//p'
(если строка заканчивается 1
, удалить символ табуляции и последний символ,затем напечатайте) или
paste fileA fileB | grep -Po '.*(?=\t1$)'
(сопоставлять только строки, заканчивающиеся на 1
, используйте упреждающий просмотр нулевой ширины, чтобы исключить табуляцию и 1
из соответствия);последнее решение требует grep, который поддерживает Perl-совместимые регулярные выражения (PCRE), такие как GNU grep.