Extract data from a file

I have a results.txt file that looks like:

 a.txt {some data} success!! b.txt {some data} success!! c.txt {some data} error!! 

I want to extract data from it. I need a conclusion, for example:

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

The problem is that the {some data} can be arbitrarily long.

How can I do that?

+4
source share
6 answers
 $ 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 

Update:

 $ awk -vRS= -vFS="\n" '{print $1":"$NF}' file a.txt:success!! b.txt:success!! c.txt:error!! 
+2
source

AWK:

 BEGIN { state=0 } state==0 && /.txt$/ { filename=$0 state=1 next } state==1 && /!!$/ { print filename ": " gensub(/!!$/, "", $0) state=0 next } 
+3
source

You can also use the following method.

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

This works for me:

 cat result.txt | xargs |sed 's/\ {[^}]*}/:/g' | sed 's/!! /\n/g' a.txt: success b.txt: success c.txt: error!! 
+1
source

cat results.txt | grep -E "(([az]\.txt)|((success)|(error)!!))" | tr -d '\n' | sed 's/!!/!!\n/' cat results.txt | grep -E "(([az]\.txt)|((success)|(error)!!))" | tr -d '\n' | sed 's/!!/!!\n/' should do this. You may need to replace \n with a literal newline.

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

Source: https://habr.com/ru/post/1302338/


All Articles