2015-03-03 4 views
0
File type = "ooTextFile" 
Object class = "TextGrid" 

xmin = 0 
xmax = 82.7959410430839 
tiers? <exists> 
size = 1 
item []: 
    item [1]: 
     class = "IntervalTier" 
     name = "ortho" 
     xmin = 0 
     xmax = 82.7959410430839 
     intervals: size = 6 
     intervals [1]:a 
      xmin = 0 
      xmax = 15.393970521541949 
      text = "Aj tento rok organizuje Rádio Sud piva. Kto chce súťažiť, nemusí sa nikde registrovať. 
     intervals [2]: 
      xmin = 15.393970521541949 
      xmax = 27.58997052154195 
       . 
       . 
       . 

Привет Я работаю с сотнями текстовых файлов, подобных этому.
Я хочу отфильтровать все значения xmin=... из этого текстового файла, но только с 16th, потому что в начале есть xmins, которые бесполезны, как вы можете видеть.Поиск слова из определенной строки GREP

Я пробовал:

cat text.txt | grep xmin 

но он показывает все строки, где xmin есть.

Пожалуйста, помогите мне. Я не могу изменять текстовые файлы, потому что мне нужно работать с сотнями из них, поэтому мне нужно разработать подходящий способ их фильтрации.

ответ

0

Использование sed и grep искать «Xmin» от 16 линии до конца одного файла:

sed -n '16,$p' foobar.txt | grep "xmin" 

В случае нескольких файлов здесь является bash скрипт, чтобы получить выход:

#!/bin/bash 
for file in "$1"/*; do 
output=$(sed -n '16,$p' "$file" | grep "xmin") 
if [[ -n $output ]]; then 
echo -e "$file has follwoing entries:\n$output"; fi; done 

Запустите сценарий, как bash script.sh /directory/containing/the/files/to/be/searched

+0

Это работает нормально для первого файла, но если у вас есть '' file1' и file2', это СЭД -n '16, файл '$ р» * | grep «xmin» 'дает все« xmin »из второго файла. – Jotne

+0

@ Jotne: Отредактировано и добавлено. – heemayl

+0

спасибо большое. У меня есть то, что я хочу использовать: «sed -n '16, $ p» text.txt | grep «xmin \ | xmax» | cut -d '=' -f2 "Я хотел бы фильтровать xmin также значения xmax, но только числа, и это работает :) Но я также хотел иметь эти значения в двух колонках. Один столбец для значений xmin и другой столбец для значений xmax. Можно ли разделить эти значения на два столбца? Что-то вроде этого: 0 15,39397 15,3937 27,5899 – Nikolaus

1

Как это:

awk 'FNR>15 && /xmin/' file* 
      xmin = 0 
      xmin = 15.393970521541949 

Это показать все xmin от линии 16


Вы также можете распечатать имя файла найденного xmin

awk 'FNR>15 && /xmin/ {$1=$1;print FILENAME" -> "$0}' file* 
file22 -> xmin = 0 
file22 -> xmin = 15.393970521541949 

Update: Нужно быть FNR для работы с несколькими файлы.

Смежные вопросы