从文件中提取数据

时间:2010-02-25 07:03:57

标签: sed grep unix

我有一个文件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 个答案:

答案 0 :(得分:3)

AWK:

BEGIN {
  state=0
}

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

state==1 && /!!$/ {
  print filename ": " gensub(/!!$/, "", $0)
  state=0
  next
}

答案 1 :(得分:2)

$ 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!!

答案 2 :(得分:2)

您也可以使用以下方式。

sed -e 's/^{some data}$//g;/^$/d;' results.txt | sed '$!N;s/\n/: /'

答案 3 :(得分:1)

这对我有用:

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

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

答案 4 :(得分:0)

cat results.txt | grep -E "(([a-z]\.txt)|((success)|(error)!!))" | tr -d '\n' | sed 's/!!/!!\n/' 应该这样做。您可能必须使用文字换行符替换\n

答案 5 :(得分:0)

awk '{print $1": "$4}' RS="\n\n" results.txt