Home > Enterprise >  Printing the numbers after match (bash)
Printing the numbers after match (bash)

Time:04-25

I'm trying to write a script (with bash) that looks for a word (for example "E( ENERGY) =") and prints the rest of the line which is effectively some numbers with "-" in front. To clarify, an example line that I'm looking for in a file is;

MOST-DESIRED RESULT E( ENERGY) = -9.68765465413

All I need is -9.68765465413 to be printed. I've managed to print the whole line, but this is rather ineffective for me. The script that I have in hand up to this point is as follows (named script.sh):

#!/usr/bin/env bash

output="$1" 
ext="log"
word="E(   ENERGY)"
find "$output" -type f -name "*.$ext" -exec grep -wFnH "$word" {}  

And I loop this script in another script (run_script.sh) for the files in a folder to look at all the files I have. And my current output looks like this;

RESULT1_DH.log:567: MOST-DESIRED RESULT E(   ENERGY) =       -1.0501552997
RESULT2.log:567: MOST-DESIRED RESULT E(   ENERGY) =       -1.0501552997

But I want it to look like this;

RESULT1_DH.log        -1.0501552997
RESULT2.log        -1.0501552997

If anyone can help me with this, I'll be grateful. Thanks in advance!

CodePudding user response:

Sample inputs:

$ head RESULT*log
==> RESULT1_DH.log <==
MOST-DESIRED RESULT E(   ENERGY) =       -1.0501552997
MOST-DESIRED RESULT E(   POWER) =       -9.9999999999

==> RESULT2.log <==
MOST-DESIRED RESULT E(   ENERGY) =       -1.0501552997
MOST-DESIRED RESULT E(   POWER) =       -9.9999999999

One awk idea:

output='.'
ext='log'
word="E(   ENERGY)"
find "${output}" -type f -name "*.${ext}" -exec awk -v ptn="${word}" 'index($0,ptn) {print FILENAME,$NF}' {}  

This generates:

./RESULT1_DH.log -1.0501552997
./RESULT2.log -1.0501552997
  •  Tags:  
  • bash
  • Related