Извлечение данных из файла - PullRequest
4 голосов
/ 25 февраля 2010

У меня есть файл results.txt, который похож на:

a.txt
{some data}
success!!

b.txt
{some data}
success!!

c.txt
{some data}
error!!

Я хочу извлечь из него данные. Я хочу вывод как:

a.txt: success
b.txt: success
c.txt: error

Проблема в том, что часть {some data} может быть произвольно длинной.

Как это можно сделать?

Ответы [ 6 ]

3 голосов
/ 25 февраля 2010

AWK:

BEGIN {
  state=0
}

state==0 && /.txt$/ {
  filename=$0
  state=1
  next
}

state==1 && /!!$/ {
  print filename ": " gensub(/!!$/, "", $0)
  state=0
  next
}
2 голосов
/ 05 марта 2010

Вы также можете использовать следующий способ.

sed -e 's/^{some data}$//g;/^$/d;' results.txt | sed '$!N;s/\n/: /'
2 голосов
/ 25 февраля 2010
$ cat file
a.txt
{some
  blah
data}
success!!

b.txt
{some data}
success!!

c.txt
{some data}
error!!

$ awk 'BEGIN{ FS="[{}]|\n";RS=""}{gsub(/!!/,"",$NF);print $1":"$NF}' file
a.txt:success
b.txt:success
c.txt:error

Обновление:

$ awk -vRS= -vFS="\n" '{print $1":"$NF}' file
a.txt:success!!
b.txt:success!!
c.txt:error!!
1 голос
/ 25 февраля 2010

Это работает для меня:

cat result.txt | xargs |sed 's/\ {[^}]*}/:/g' | sed 's/!! /\n/g'

a.txt: success
b.txt: success
c.txt: error!!
0 голосов
/ 01 апреля 2010
awk '{print $1": "$4}' RS="\n\n" results.txt
0 голосов
/ 25 февраля 2010

cat results.txt | grep -E "(([a-z]\.txt)|((success)|(error)!!))" | tr -d '\n' | sed 's/!!/!!\n/' должен это сделать. Возможно, вам придется заменить \n буквальным переводом строки.

...