Как вытащить определенные фразы из файлов в linux

Если нужно найти определенное слово в файлах, то можно использовать стандартный поиск. Если нужно вытащить все строки, где упоминается определенное слово, то есть grep (команда: grep слово имя_файла). А вот awk поможет в том случае, когда строки имеют общие символы, но вот нужные нам слова постоянно меняются.

 

И так, чтобы вытащить определенные фразы из файла можно использовать следующую команду:

awk ‘/фраза_которая_есть_в_кажой строке/ {print $каким_по_счёту_стоит_нужное_слово_от_начала_строки}’ имя_файла_откуда_вытаскиваем_слово

Например, есть текст с именем text.txt и содержимым:

xxx: Привет!
yyy: И тебе не болеть.
xxx: Пока тогда.

В результате такого запроса:

awk ‘/xxx:/ {print $2}’ text.txt

У нас останется:

Привет!
Пока

Если же нужно вытащить всю строку после определенного выражения, то для этого есть такой пример:

cat text.txt | awk ‘/xxx:/ {print $0}’ | cut -f 2- -d’ ‘

0 – обозначает, что вытаскиваем целую строку, а не определенное слово (аналог команды grep);
2 – каким по счёту будет первое слово для вытаскивание строки после него.

Результатом выше написанной команды будет:

Привет!
Пока тогда.

 

Если же у нас группа файлов, то в начале нужно подготовить файл с путями для всех файлов (Да, даешь тавтологию!).

Для примера пусть этим файлом будет list.txt с содержимым:

/home/zegi/text.txt
/home/zegi/text2.txt

 

После чего готовим скрипт:

#!/bin/bash
for n in $(cat list.txt);
do
m=`echo $n`
cat $m | awk '/xxx:/ {print $0}' | cut -f 2- -d' ' >> файл_вывода
done

 

Незабываем сделать скрипт исполняемым (chmod +x имя_скрипта) и запустить (./имя_скрипта).

 

На самом деле, у awk огромное количество применений. Для более подробной информации наберите man awk. Лично мне всегда хватало того функционала, который описан в примерах.

Поделись статьёй с друзьями

Или просто поиграйся с кнопочками

Добавить комментарий