![извлечь строку из той же строки](https://rvso.com/image/36017/%D0%B8%D0%B7%D0%B2%D0%BB%D0%B5%D1%87%D1%8C%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%D0%B8%D0%B7%20%D1%82%D0%BE%D0%B9%20%D0%B6%D0%B5%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%20.png)
У меня есть такая таблица:
и файл, содержащий 2 строки из третьего столбца, как: яблоко картофель
Я хотел бы извлечь заголовок и все строки, содержащие строки «яблоко» и «картошка», чтобы получить это
Спасибо
решение1
С использованием awk
:
awk 'FNR == 1 || /potato|apple/'
С использованием sed
:
sed -n '1p; /potato\|apple/p'
В обоих случаях potato|apple
печатается строка номер 1 и все соответствующие ей строки.
решение2
Вот таблица txt еще раз в текстовом виде:
A B C D E
21 63 apple yellow 5
23 69 lemon green 6
45 135 orange yellow 7
67 201 mango green 4
54 162 potato maroon 5
Хотя я мог бы придумать решение с низкой сложностью, я думаю, что оно немного хакерское :-) Предположим, что файл таблицы txt называетсяtable1
$ head -1 table1 && grep '\b\(potato\|apple\)\b' table1
Это возьмет первую строку и добавит grep
к ней результат. \b
является границей слова. Таким образом, это гарантирует, что такие слова, как "grapple (hook)" будут отфильтрованы :) Другое более сложное решение предполагает, что A, B, C... разделены табуляторами \t
:
$ grep '\(\b\(potato\|apple\)\b\|\([A-Z]\|\(\t\|\n?$\)\)\)' table1