Help shell scripting using awk or sed or other


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help shell scripting using awk or sed or other
# 1  
Old 09-11-2015
Help shell scripting using awk or sed or other

I need to create a script to change a file depending of 3 conditions using a target as parameter...

first condition


Code:
<chamada>
	<numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
	<imeiOriginador></imeiOriginador>
	<cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
	<cgiUltimaErbOriginador></cgiUltimaErbOriginador>
	<numeroTerminalRecebedor>CALLED</numeroTerminalRecebedor>
	<imeiRecebedor></imeiRecebedor>
	<cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
	<cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
	<tipoChamada>N</tipoChamada>
	<formatoConteudoChamada>V</formatoConteudoChamada>
	<dataInicio>05102011</dataInicio>
	<horaInicio>171558</horaInicio>
	<gmt>GMT-03</gmt>
	<duracao>000041</duracao>
	<tipo></tipo>
	<central>CENTRAL</central>
	<numeroRedirecionado>TARGET</numeroRedirecionado>
</chamada>

i need to duplicate all the text following the instructions

Code:
<chamada>
	<numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
	<imeiOriginador></imeiOriginador>
	<cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
	<cgiUltimaErbOriginador></cgiUltimaErbOriginador>
	<numeroTerminalRecebedor>TARGET</numeroTerminalRecebedor>
	<imeiRecebedor></imeiRecebedor>
	<cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
	<cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
	<tipoChamada>N</tipoChamada>
	<formatoConteudoChamada>V</formatoConteudoChamada>
	<dataInicio>05102011</dataInicio>
	<horaInicio>171558</horaInicio>
	<gmt>GMT-03</gmt>
	<duracao>000041</duracao>
        <tipo></tipo>
	<central>CENTRAL</central>
	<numeroRedirecionado>.</numeroRedirecionado>
</chamada>
<chamada>
	<numeroTerminalOriginador>CALLED</numeroTerminalOriginador>
	<imeiOriginador></imeiOriginador>
	<cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
	<cgiUltimaErbOriginador></cgiUltimaErbOriginador>
	<numeroTerminalRecebedor>TARGET</numeroTerminalRecebedor>
	<imeiRecebedor></imeiRecebedor>
	<cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
	<cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
	<tipoChamada>N</tipoChamada>
	<formatoConteudoChamada>V</formatoConteudoChamada>
	<dataInicio>05102011</dataInicio>
	<horaInicio>171558</horaInicio>
	<gmt>GMT-03</gmt>
	<duracao>000041</duracao>
        <tipo></tipo>
	<central>CENTRAL</central>
	<numeroRedirecionado>.</numeroRedirecionado>
</chamada>

second condition


Code:
<chamada>
	<numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
	<imeiOriginador></imeiOriginador>
	<cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
	<cgiUltimaErbOriginador></cgiUltimaErbOriginador>
	<numeroTerminalRecebedor>TARGET</numeroTerminalRecebedor>
	<imeiRecebedor></imeiRecebedor>
	<cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
	<cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
	<tipoChamada>N</tipoChamada>
	<formatoConteudoChamada>V</formatoConteudoChamada>
	<dataInicio>05102011</dataInicio>
	<horaInicio>171558</horaInicio>
	<gmt>GMT-03</gmt>
	<duracao>000041</duracao>
	<tipo></tipo>
	<central>CENTRAL</central>
	<numeroRedirecionado>REDIRECTED</numeroRedirecionado>
</chamada>

i need to change to (remove the 3 last tags)

Code:
<chamada>
	<numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
	<imeiOriginador></imeiOriginador>
	<cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
	<cgiUltimaErbOriginador></cgiUltimaErbOriginador>
	<numeroTerminalRecebedor>TARGET</numeroTerminalRecebedor>
	<imeiRecebedor></imeiRecebedor>
	<cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
	<cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
	<tipoChamada>N</tipoChamada>
	<formatoConteudoChamada>V</formatoConteudoChamada>
	<dataInicio>05102011</dataInicio>
	<horaInicio>171558</horaInicio>
	<gmt>GMT-03</gmt>
	<duracao>000041</duracao>
</chamada>

third condition

Code:
XYZ= 550549 or 550550 or 550551 or 550555 or 550558 or 550559

Code:
<chamada>
	<numeroTerminalOriginador>TARGET</numeroTerminalOriginador>
	<imeiOriginador></imeiOriginador>
	<cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
	<cgiUltimaErbOriginador></cgiUltimaErbOriginador>
	<numeroTerminalRecebedor>XYZ</numeroTerminalRecebedor>
	<imeiRecebedor></imeiRecebedor>
	<cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
	<cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
	<tipoChamada>N</tipoChamada>
	<formatoConteudoChamada>V</formatoConteudoChamada>
	<dataInicio>05102011</dataInicio>
	<horaInicio>171558</horaInicio>
	<gmt>GMT-03</gmt>
	<duracao>000041</duracao>
	<tipo></tipo>
	<central>CENTRAL</central>
	<numeroRedirecionado>REDIRECTED</numeroRedirecionado>
</chamada>

i have to substitute to:

Code:
<chamada>
	<numeroTerminalOriginador>TARGET</numeroTerminalOriginador>
	<imeiOriginador></imeiOriginador>
	<cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
	<cgiUltimaErbOriginador></cgiUltimaErbOriginador>
	<numeroTerminalRecebedor>REDIRECTED</numeroTerminalRecebedor>
	<imeiRecebedor></imeiRecebedor>
	<cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
	<cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
	<tipoChamada>N</tipoChamada>
	<formatoConteudoChamada>V</formatoConteudoChamada>
	<dataInicio>05102011</dataInicio>
	<horaInicio>171558</horaInicio>
	<gmt>GMT-03</gmt>
	<duracao>000041</duracao>
	<tipo></tipo>
	<central>CENTRAL</central>
	<numeroRedirecionado>.</numeroRedirecionado>
</chamada>

thanks

Last edited by Don Cragun; 09-11-2015 at 06:26 PM.. Reason: Add CODE tags.
# 2  
Old 09-13-2015
Any attempts from your side?

---------- Post updated at 20:52 ---------- Previous update was at 20:51 ----------

And, please be way more specific and detailed with your description!

---------- Post updated at 22:42 ---------- Previous update was at 20:52 ----------

Would this help for the "first condidtion"?
Code:
awk '
        {T[NR]=$0}
END     {for (i=1; i<=NR; i++)  {sub ("TARGET", ".", T[i])
                                 sub ("CALLED","TARGET",T[i])
                                 print T[i]}
         for (i=1; i<=NR; i++)  {sub ("CALLER","CALLED",T[i])
                                 print T[i]}
        }
' file
<chamada>
    <numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
    <imeiOriginador></imeiOriginador>
    <cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
    <cgiUltimaErbOriginador></cgiUltimaErbOriginador>
    <numeroTerminalRecebedor>TARGET</numeroTerminalRecebedor>
    <imeiRecebedor></imeiRecebedor>
    <cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
    <cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
    <tipoChamada>N</tipoChamada>
    <formatoConteudoChamada>V</formatoConteudoChamada>
    <dataInicio>05102011</dataInicio>
    <horaInicio>171558</horaInicio>
    <gmt>GMT-03</gmt>
    <duracao>000041</duracao>
    <tipo></tipo>
    <central>CENTRAL</central>
    <numeroRedirecionado>.</numeroRedirecionado>
</chamada>
<chamada>
    <numeroTerminalOriginador>CALLED</numeroTerminalOriginador>
    <imeiOriginador></imeiOriginador>
    <cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
    <cgiUltimaErbOriginador></cgiUltimaErbOriginador>
    <numeroTerminalRecebedor>TARGET</numeroTerminalRecebedor>
    <imeiRecebedor></imeiRecebedor>
    <cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
    <cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
    <tipoChamada>N</tipoChamada>
    <formatoConteudoChamada>V</formatoConteudoChamada>
    <dataInicio>05102011</dataInicio>
    <horaInicio>171558</horaInicio>
    <gmt>GMT-03</gmt>
    <duracao>000041</duracao>
    <tipo></tipo>
    <central>CENTRAL</central>
    <numeroRedirecionado>.</numeroRedirecionado>
</chamada>

---------- Post updated at 22:47 ---------- Previous update was at 22:42 ----------

And, mayhap this for the "second condition"?
Code:
awk '
        {T[NR]=$0
         CNT=NR
        }
END     {T[CNT-3]=T[CNT]
         CNT-=3
         for (i=1; i<=CNT; i++) {print T[i]}
        }
' file

# 3  
Old 09-14-2015
Hello poulis,

Welcome to forum, following may help you in same.
For your first condition, let's say I am assuming (as you didn't mention) lines sequence are NOT proper apart from they are always coming from tag <chamada> to </chamada>. Then following may help you in same.
I have prepared a Input_file by taking help of your shown input and little editing in it to off course cross verify my code.
Input_file:
Code:
 <chamada>
        <numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
        <imeiOriginador></imeiOriginador>
        <cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
        <cgiUltimaErbOriginador></cgiUltimaErbOriginador>
        <imeiRecebedor></imeiRecebedor>
        <cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
        <cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
        <tipoChamada>N</tipoChamada>
        <formatoConteudoChamada>V</formatoConteudoChamada>
        <dataInicio>05102011</dataInicio>
        <horaInicio>171558</horaInicio>
        <numeroTerminalRecebedor>CALLED</numeroTerminalRecebedor>
       <gmt>GMT-03</gmt>
        <duracao>000041</duracao>
        <tipo></tipo>
        <central>CENTRAL</central>
        <numeroRedirecionado>TARGET</numeroRedirecionado>
</chamada>
<chamada>
        <numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
        <imeiOriginador></imeiOriginador>
        <cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
        <cgiUltimaErbOriginador></cgiUltimaErbOriginador>
        <numeroTerminalRecebedor>CALLED</numeroTerminalRecebedor>
       <imeiRecebedor></imeiRecebedor>
        <cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
        <cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
        <tipoChamada>N</tipoChamada>
        <formatoConteudoChamada>V</formatoConteudoChamada>
        <dataInicio>05102011</dataInicio>
        <horaInicio>171558</horaInicio>
        <gmt>GMT-03</gmt>
        <duracao>000041</duracao>
        <tipo></tipo>
        <central>CENTRAL</central>
        <numeroRedirecionado>TARGET</numeroRedirecionado>
</chamada>
<chamada>
        <numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
        <imeiOriginador></imeiOriginador>
        <cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
        <cgiUltimaErbOriginador></cgiUltimaErbOriginador>
        <numeroTerminalRecebedor>TARGET</numeroTerminalRecebedor>
        <imeiRecebedor></imeiRecebedor>
        <cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
        <cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
        <tipoChamada>N</tipoChamada>
        <formatoConteudoChamada>V</formatoConteudoChamada>
        <dataInicio>05102011</dataInicio>
        <horaInicio>171558</horaInicio>
        <gmt>GMT-03</gmt>
        <duracao>000041</duracao>
        <tipo></tipo>
        <central>CENTRAL</central>
        <numeroRedirecionado>REDIRECTED</numeroRedirecionado>
</chamada>
<chamada>
        <numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
        <imeiOriginador></imeiOriginador>
        <cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
        <cgiUltimaErbOriginador></cgiUltimaErbOriginador>
        <numeroTerminalRecebedor>TARGET</numeroTerminalRecebedor>
        <imeiRecebedor></imeiRecebedor>
        <cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
        <cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
        <tipoChamada>N</tipoChamada>
        <formatoConteudoChamada>V</formatoConteudoChamada>
        <dataInicio>05102011</dataInicio>
        <horaInicio>171558</horaInicio>
        <gmt>GMT-03</gmt>
        <duracao>000041</duracao>
        <tipo></tipo>
        <central>CENTRAL</central>
        <numeroRedirecionado>REDIRECTED</numeroRedirecionado>
</chamada>

Now after running as follows code for first condition.
Code:
 awk -vs1="<numeroRedirecionado>TARGET</numeroRedirecionado>" -vs2="<numeroTerminalOriginador>CALLER</numeroTerminalOriginador>" -vs3="<numeroTerminalRecebedor>CALLED</numeroTerminalRecebedor>" 'BEGIN{A[s1];A[s2];A[s3];} {while($0 !~ /<\/chamada>/){P[NR]=$0;sub(/^[[:space:]]+/,X,$0);D=$0;{for(D in A){S++;delete A[D]}};getline}} {if(S==3){sub("TARGET",".",P[NR-1]);for(i=1;i<=NR;i++){if(P[i]){print P[i];delete P[i]}}};print $0}' check_condition11

Output will be as follows then.
Code:
 <chamada>
        <numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
        <imeiOriginador></imeiOriginador>
        <cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
        <cgiUltimaErbOriginador></cgiUltimaErbOriginador>
        <imeiRecebedor></imeiRecebedor>
        <cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
        <cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
        <tipoChamada>N</tipoChamada>
        <formatoConteudoChamada>V</formatoConteudoChamada>
        <dataInicio>05102011</dataInicio>
        <horaInicio>171558</horaInicio>
        <numeroTerminalRecebedor>CALLED</numeroTerminalRecebedor>
        <gmt>GMT-03</gmt>
        <duracao>000041</duracao>
        <tipo></tipo>
        <central>CENTRAL</central>
        <numeroRedirecionado>.</numeroRedirecionado>
</chamada>
<chamada>
        <numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
        <imeiOriginador></imeiOriginador>
        <cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
        <cgiUltimaErbOriginador></cgiUltimaErbOriginador>
        <numeroTerminalRecebedor>CALLED</numeroTerminalRecebedor>
        <imeiRecebedor></imeiRecebedor>
        <cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
        <cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
        <tipoChamada>N</tipoChamada>
        <formatoConteudoChamada>V</formatoConteudoChamada>
        <dataInicio>05102011</dataInicio>
        <horaInicio>171558</horaInicio>
        <gmt>GMT-03</gmt>
        <duracao>000041</duracao>
        <tipo></tipo>
        <central>CENTRAL</central>
        <numeroRedirecionado>.</numeroRedirecionado>
</chamada>
<chamada>
        <numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
        <imeiOriginador></imeiOriginador>
        <cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
        <cgiUltimaErbOriginador></cgiUltimaErbOriginador>
        <numeroTerminalRecebedor>TARGET</numeroTerminalRecebedor>
        <imeiRecebedor></imeiRecebedor>
        <cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
        <cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
        <tipoChamada>N</tipoChamada>
        <formatoConteudoChamada>V</formatoConteudoChamada>
        <dataInicio>05102011</dataInicio>
        <horaInicio>171558</horaInicio>
        <gmt>GMT-03</gmt>
        <duracao>000041</duracao>
        <tipo></tipo>
        <central>CENTRAL</central>
        <numeroRedirecionado>REDIRECTED</numeroRedirecionado>
</chamada>
<chamada>
        <numeroTerminalOriginador>CALLER</numeroTerminalOriginador>
        <imeiOriginador></imeiOriginador>
        <cgiPrimeiraErbOriginador></cgiPrimeiraErbOriginador>
        <cgiUltimaErbOriginador></cgiUltimaErbOriginador>
        <numeroTerminalRecebedor>TARGET</numeroTerminalRecebedor>
        <imeiRecebedor></imeiRecebedor>
        <cgiPrimeiraErbRecebedor></cgiPrimeiraErbRecebedor>
        <cgiUltimaErbRecebedor></cgiUltimaErbRecebedor>
        <tipoChamada>N</tipoChamada>
        <formatoConteudoChamada>V</formatoConteudoChamada>
        <dataInicio>05102011</dataInicio>
        <horaInicio>171558</horaInicio>
        <gmt>GMT-03</gmt>
        <duracao>000041</duracao>
        <tipo></tipo>
        <central>CENTRAL</central>
        <numeroRedirecionado>REDIRECTED</numeroRedirecionado>
</chamada>

I have prepared second condition code too but couldn't found it in system which name I saved it, looking for it, will let you know when I get as it is almost a day I haven't slept. Let me know if this helps you.

Thanks,
R. Singh
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need help with awk and sed scripting

I need help with sed and awk scripts to search for Symmetrix ID=000090009902 and then grep its child disk devices associated to the dead paths and display them only, so that those dead devices can be removed. test01:/#powermt display dev=all Pseudo name=hdiskpower0 Symmetrix ID=000090009902... (4 Replies)
Discussion started by: aix_admin_007
4 Replies

2. Shell Programming and Scripting

Use case insensitive variable in ksh shell scripting using sed or awk

I am using a variable called $variable in a pattern search to print from a starting variable to a constant value. the variable search should be case in sensitive. i tired using Ip at the end in the below command. but in ksh it is not working. sed -n "/$variable/,/constant/p" file i also... (11 Replies)
Discussion started by: johnjs
11 Replies

3. Shell Programming and Scripting

Shell Scripting -- sed

Hi, In one of my scripts, I am using sed to do an expression replacement. The code in the script is as under sed "s|MY_INP_Lab=""|MY_INP_Lab="${2}"|" file1, where $2=xyz_abc_mbk The EXPECTED output is in file1, all the instances ofMY_INP_Lab="" shall be replaced by... (2 Replies)
Discussion started by: vivekmattar
2 Replies

4. Shell Programming and Scripting

Scripting awk or sed or shell

input buff_1 abc satya_1 pvr_1 buff_2 def satya_1 pvr_1 buff_3 ghi satya_1 pvr_1 buff_4 jkl satya_1 pvr_1 required out put buff_1 abc satya_1 pvr_1 abc satya_1 buff_2 def satya_1 pvr_1 def satya_1 buff_3 ghi satya_1 pvr_1 ghi satya_1 (6 Replies)
Discussion started by: pvr_satya
6 Replies

5. Shell Programming and Scripting

sed or awk scripting help needed

hi all, for an example : df -k output shows: $ df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/cciss/c0d0p6 3099260 1117760 1824068 8% / /dev/cciss/c0d0p1 256666 18065 225349 8% /boot none 8219180 0 8219180 0% /dev/shm /dev/mapper/vglocal-home 1032088 245172 734488 26%... (7 Replies)
Discussion started by: raghur77
7 Replies

6. Shell Programming and Scripting

Sed function is shell scripting

Hello everybody, I trying to convert a text inside my file that looks something like this: into hyperlink so that the user can click onto it..... I tried this but doesn't work cat mylist9.html |sed -e '<a href="' >mylist13.html Thanks (13 Replies)
Discussion started by: kev_1234
13 Replies

7. UNIX for Dummies Questions & Answers

tr, sed, awk, cat or scripting

I need to change all Newline caracters (\12) to Fieldseparator(\34). tr -A '\12' '\34' <file1> file2 Replace all delete (\177) with Newline (\12) tr -A '\177' '\12' <file2> file3 Put the name of the file first in all rows. awk '{printf "%s\34%s\n", FILENAME,$0} file3 > file4 So far no... (6 Replies)
Discussion started by: MrKlint
6 Replies

8. Shell Programming and Scripting

usage...sed/awk/reg-exp ..in shell scripting

in shell scripting there is extensive usage of i> regular expression ii>sed iii>awk can anyone tell me the suitable contexts ...i mean which one is suitable for what kind of operation. like the reg-exp and sed seems to be doing the same job..i.e pattern matching (1 Reply)
Discussion started by: mobydick
1 Replies

9. Shell Programming and Scripting

scripting with awk and sed

hey all, i was just wondering if it was possible to to get data from user input , and parse it through sed to remove or add what that user has entered into a flat file? do i need awk ? any help is greatly appreciated ~shan2on (2 Replies)
Discussion started by: shan2on
2 Replies

10. Shell Programming and Scripting

Help on SED AWK in shell scripting

Hi, I have a script abc.sql which contains a word 'timestamp'. I have another script xyz.txt genrated everyweek, which has a new timestamp value every week. How do I replace the word 'timestamp' in script abc.sql with the value mentioned in the script xyz.txt, so that I can run the script... (3 Replies)
Discussion started by: kaushys
3 Replies
Login or Register to Ask a Question