Today (Saturday) We will make some minor tuning adjustments to MySQL.

You may experience 2 up to 10 seconds "glitch time" when we restart MySQL. We expect to make these adjustments around 1AM Eastern Daylight Saving Time (EDT) US.


Grep string causes extra spaces


Login or Register to Reply

 
Thread Tools Search this Thread
# 1  
Grep string causes extra spaces

Hello,
I have an xml file and my aim is to grab each line in keywords file and search the string in another file.
When keyword is found in xml file,I expect the script to go to previous line in the xml file and grab the string/value between two strings. It's almost working with an error.

tab separated keywords.txt
Code:
test1 qqq98
test35 sss32
test26 Rsiw

1.xml file
Code:
  <id="229954e70d6b702f8d570b4be11af181">
    <display-name>test44 lgi3d</display-name>
  <id="229954e70d6b702f8d51331cbe11af181">
    <display-name>test35 kkld</display-name>
  <id="2223230did3s2Qafevrgvve1cbe11af181">
    <display-name>test26 Rsiw</display-name>

expected output:
Code:
test1 qqq98 id=""
test35 sss32 id=""
test26 Rsiw id="2223230did3s2Qafevrgvve1cbe11af181"

Code:
while read COL1 COL2 && read -r line <&3; do
A=$(grep -B1 "$COL1.*$COL2" 1.xml | grep -v "display-name" | sed -e 's/<id=\"\(.*\)\">/\1/' )
#A=$(grep -B1 "$COL".*$COL2" 1.xml | grep -v "display-name" | grep -o -P '(?<=<id=\").*(?=\">)')
echo "$COL1 $COL2 id=\"$A\""
done < keywords.txt 3<1.xml

This gives:
Code:
test1 qqq98 id=""
test35 sss32 id=""
test26 Rsiw id="  2223230did3s2Qafevrgvve1cbe11af181"

I wondered why there are two spaces before $A variable at output console.

Thank you
Boris

Last edited by baris35; 05-16-2019 at 10:01 AM..
# 2  
It doesn't print "extra" spaces, but the two leading spaces in the "id" line, which you do not remove with your sed command. Try again piping through
Code:
sed -e 's/^ *<id=\"\(.*\)\">/\1/'

, i.e. include the spaces from line start...
This User Gave Thanks to RudiC For This Post:
# 3  
How about (be aware there's NO test1 in your data samples)
Code:
awk -F"[<>]" '
NR == FNR       {T[$0]
                 next
                }
/<id/           {TMP = $2
                 next
                }
                {print $3, ($3 in T)?TMP:"id=\"\""}
' keywords.txt 1.xml 
test44 lgi3d id=""
test35 kkld id=""
test26 Rsiw id="2223230did3s2Qafevrgvve1cbe11af181"

Aside: why do you read line <&3 and then don't use it?
This User Gave Thanks to RudiC For This Post:
# 5  
Code:
while read key; do
        while read line; do
                if [[ $line =~ $key ]]; then
                        IFS=\" read a id z
                        break
                fi
        done < <(tac 1.xml)
        echo $key id=\"$id\"
        unset id
done < keywords.txt

This User Gave Thanks to nezabudka For This Post:
# 6  
Code:
awk -F ">|<" '
NR == FNR       {tmp=$2; getline; T[$3] = tmp; next
                }
                {print  $0, ($0 in T)?T[$0]:"id=\"\""
                }
' 1.xml keywords.txt

--- Post updated at 20:34 ---

Code:
awk -F '[<>"]' '
NR == FNR       {tmp=$3; getline; T[$3] = tmp; next
                }
                {print  $0, "id=\"" T[$0] "\""
                }
' 1.xml keywords.txt

This User Gave Thanks to nezabudka For This Post:
# 7  
Thank You All,
I will also test your codes and keep you posted.

Kind regards
Boris
Login or Register to Reply

|
Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
Removing extra unwanted spaces
anshaa
hi, i need to remove the extra spaces in the filed. Sample: abc~bd ~bkd123 .. 1space abc~badf ~bakdsf123 .. 2space abc~bqed ~bakuowe .. 3space output: abc~bd ~bkd123 .. 1space abc~badf~bakdsf123 .. 2space abc~bqed~bakuowe .. 3space i used the following command,... Shell Programming and Scripting
2
Shell Programming and Scripting
grep on string separated by spaces
dustytina
hi I am on AIX 5 and i have a script that runs the following command to list processes running. I then want to kill the returned processes. The PID are on field 2 separated by spaces. $ ps -ef|grep "rams.e $PORT" lesqa 1826998 2646248 0 11:20:35 pts/2 0:00 grep rams.e t24cm 2789380 ...... Shell Programming and Scripting
3
Shell Programming and Scripting
How to remove extra spaces from a string??
vanitham
Hi, I have a string like this and i want to remove extra spaces that exists between the words. Here is the sentence. $string="The small DNA genome of hepadnaviruses is replicated by reverse transcription via an RNA intermediate. This RNA "pregenome" contains ...... Shell Programming and Scripting
2
Shell Programming and Scripting
Remove extra spaces in a line
vikas027
Hi, I need a help in deleting extra spaces in a text. I have a huge file, a part of it is :- 3 09/21/08 03:32:07 started undef mino Oracle nmx004.wwdc.numonyx.com Message Text : The Oracle session with the PID 1103 has a CPU time ...... Shell Programming and Scripting
6
Shell Programming and Scripting
To remove the extra spaces in unix
Sho
Hi... I am quite new to Unix and would like an issue to be resolved. I have a file in the format below; 4,Reclaim,ECXTEST02,abc123,Harry Potter,5432 6730 0327 5469,0603,,MC,,1200,EUR,sho-001,,1,,,abc123,1223 I would like my output to be as follows; 4,Reclaim,ECXTEST02,abc123,Harry...... UNIX for Dummies Questions & Answers
4
UNIX for Dummies Questions & Answers

Featured Tech Videos