Home > OS >  How to search the full string in file which is passed as argument in shell script?
How to search the full string in file which is passed as argument in shell script?

Time:03-08

i am passing a argument and that argument i have to match in file and extract the information. Could you please how I can get it?

Example:

I have below details in file-

iMedical_Refined_load_Procs_task_id=970113
HV_Rawlayer_Execution_Process=988835
iMedical_HV_Refined_Load=988836
DHS_RawLayer_Execution_Process=988833
iMedical_DHS_Refined_Load=988834

If I am passing 'hv' as argument so it should to pick 'iMedical_HV_Refined_Load' and give the result - '988836'

If I am passing 'dhs' so it should pick - 'iMedical_DHS_Refined_Load' and give the result = '988834'

I tried below logic but its not giving the result correctly. What Changes I need to do-

echo $1 | tr a-z A-Z
g=${1^^}
echo $g
echo $1
val=$(awk -F= -v s="$g" '$g ~ s{print $2}' /medaff/Scripts/Aggrify/sltconfig.cfg)
echo "TASK ID is $val"

CodePudding user response:

Assuming your matching criteria is the first string after delimiter _ and the output needed is the numbers after the = char, then you can try this sed

$ sed -n "/_$1/I{s/[^=]*=\(.*\)/\1/p}" input_file
$ read -r input
hv
$ sed -n "/_$input/I{s/[^=]*=\(.*\)/\1/p}" input_file
988836
$ read -r input
dhs
$ sed -n "/_$input/I{s/[^=]*=\(.*\)/\1/p}" input_file
988834

CodePudding user response:

If I'm reading it right, 2 quick versions -

$: cat 1
awk -F= -v s="_${1^^}_" '$1~s{print $2}' file

$: cat 2
sed -En "/_${1^^}_/{s/^.*=//;p;}" file

Both basically the same logic.

In pure bash -

$: cat 3
while IFS='=' read key val; do [[ "$key" =~ "_${1^^}_" ]] && echo "$val"; done < file

That's a lot less efficient, though.

If you know for sure there will be only one hit, all these could be improved a bit by short-circuit exits, but on such a small sample it won't matter at all. If you have a larger dataset to read, then I strongly suggest you formalize your specs better than "in this set I should get...".

  • Related