Как извлечь целую строку, основанную на одном ключевом слове с первым появлением из файла CSV или Excel? - PullRequest
0 голосов
/ 11 марта 2019

Я хотел бы извлечь строку из листа Excel на основе нескольких ключевых слов (строк) с одним вхождением.Итак, у меня есть команда linux, подобная этой,

grep -e "keyword" | head -1
awk '/keyword/ { print; exit; }' ./filename

Она работает для одного ключевого слова, когда я собирался сделать то же самое для нескольких строк, у меня есть такая команда linux,

sed -n -e '/keyword1/p;/keyword2/p;/keyword2/p' ./file'
sed -n -E -e '/(keyword1|keyword2|keyword3)/p' ./file
grep -E -e '(keyword1|keyword2|keyword3)' ./file

Но эти команды извлекают все ключевые слова (одно и то же ключевое слово имеет более 50–60 избыточных вхождений в файле excel / csv), но не останавливает первое вхождение.Пожалуйста, помогите мне решить эту проблему.Я должен извлечь несколько строк с первым появлением.

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Необходимо ввести переменные, чтобы вывести только одну строку, содержащую ключевое слово.

Следует также учитывать ситуацию, когда в строке найдено более одного ключевого слова.

Дайте попытку этому:

awk '$0 ~ keyword1 "|" keyword2 "|" keyword3 {
  if ($0 ~ keyword1 && k1 == 0) { tbp=1; k1=1 }
  if ($0 ~ keyword2 && k2 == 0) { tbp=1; k2=1 }
  if ($0 ~ keyword3 && k3 == 0) { tbp=1; k3=1 }
  if (tbp == 1) { print ; tbp=0 }
  if ( k1+k2+k3 >= 3 ) exit
}' keyword1=" my key " keyword2="car" keyword3="bathroom" ./filename
0 голосов
/ 11 марта 2019

Вы можете использовать опцию -m1 grep для остановки при первом появлении. Например:

 grep -E -m1 'string1|string2' your_file
...