Visit Our UNIX and Linux User Community


Parsing a file (sed/awk?)


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Parsing a file (sed/awk?)
# 1  
Old 06-24-2008
Parsing a file (sed/awk?)

Hello people, newbie question. I'm trying to parse these type of file

1 "CAR " " C1 " " " 6 0 C1
2 "CAR " " O1A" " " 8 0 O1A
3 "CAR " " O1B" " " 8 -1 O1B
4 "CAR " " C2 " " " 6 0 C2
5 "CAR " " C3 " " " 6 0 C3
6 "CAR " "H5A1" " " 8 0 H5A1

to the new one

1 "CAR " " C1 " " " 6 0 0 1 "C1" 0
2 "CAR " " O1A" " " 8 0 0 1 "O1A" 0
3 "CAR " " O1B" " " 8 -1 0 1 "O1B" 0
4 "CAR " " C2 " " " 6 0 0 1 "C2" 0
5 "CAR " " C3 " " 1f" 6 0 0 1 "C3" 0
6 "CAR " "H5A1" " " 6 0 0 1 "H5A1" 0

Every field are constant, but I have to insert the 1f value in a certain line (here the number 5) and i know previosly what is it's (i think i will use a counter to do it).

Are sed/awk the best approach to do it? How is the best way to start, extract the values with awk and then modify it with sed? is a mess that some fields could have white spaces ( " C1 ", " O1B", "H5A1").

I'm starting with this, could anybody help me with the code?
Thank you in advanced. Best regards.
# 2  
Old 06-24-2008
Code:
nawk '{$NF = "0 1" "\"" $NF "\" 0"; print}' myFile

# 3  
Old 06-24-2008
Great!!! thank you very much. And, could you help me about how is the way to insert the 1f value in a certain line, for example in the line number five? (whoa, this is really powerful).

Thank youn in advanced.
# 4  
Old 06-24-2008
Code:
nawk '{$NF = "0 1" "\"" $NF "\" 0"; if (FNR==5) $8= "1f" $8; print}' myFile

# 5  
Old 06-24-2008
I have a problem with white spaces, they are important for the specified file format, and using the awk command

Code:
awk '{$NF = "0 1" "\"" $NF "\" 0"; print}' myFile

i retrieve the correct output, but with the fields separated only for one white space.

Please, what could be the way to parse this lines...?

HTML Code:
    1        2   -5.288000   -3.217000    4.035000     1 " " X " "    2   0.17850   0.00000 "car " " C1 " "    "    6   0 C1
    2       15   -5.385000   -3.069000    5.276000     1 " " X " "   70  -0.64780   0.00000 "car " " O1a" "    "    8   0 O1a
    3       18   -6.014000   -4.000000    3.392000     1 " " X " "   70  -0.64780   0.00000 "car " " O1b" "    "    8  -1 O1b
    4        3   -4.190000   -2.467000    3.295000     1 " " X " "    2   0.06130   0.00000 "car " " C2 " "    "    6   0 C2
    5        3   -3.620000   -3.260000    2.103000     1 " " X " "    2   0.09070   0.00000 "car " " C3 " "    "    6   0 C3
    6       16   -2.802000   -2.377000    1.324000     1 " " X " "   70  -0.38950   0.00000 "car " " O3 " "    "    8   0 O3
...to this new ones, respecting the number of white spaces?

HTML Code:
    1        2   -5.288000   -3.217000    4.035000     1 " " X " "    2   0.17850   0.00000 "CAR " " C1 " "    "    6   0    0    1 "C1" 0
    2       15   -5.385000   -3.069000    5.276000     1 " " X " "   70  -0.64780   0.00000 "CAR " " O1A" "    "    8   0    0    1 "O1A" 0
    3       18   -6.014000   -4.000000    3.392000     1 " " X " "   70  -0.64780   0.00000 "CAR " " O1B" "    "    8  -1    0    1 "O1B" 0
    4        3   -4.190000   -2.467000    3.295000     1 " " X " "    2   0.06130   0.00000 "CAR " " C2 " "    "    6   0    0    1 "C2" 0
    5        3   -3.620000   -3.260000    2.103000     1 " " X " "    2   0.09070   0.00000 "CAR " " C3 " "  1f"    6   0    0    1 "C3" 0
    6        3   -2.750000   -4.417000    2.639000     1 " " X " "    2   0.14300   0.00000 "CAR " " C4 " "    "    6   0    0    1 "C4" 0
I use html tag to reflect the correct white spaces. Thank you in advanced.
# 6  
Old 06-24-2008
Quote:
Originally Posted by aristegui
I have a problem with white spaces, they are important for the specified file format, and using the awk command

Code:
awk '{$NF = "0 1" "\"" $NF "\" 0"; print}' myFile

i retrieve the correct output, but with the fields separated only for one white space.

Please, what could be the way to parse this lines...?
Code:
awk -F'[ ]' '{$NF = "0 1" "\"" $NF "\"\t0"; print}' file

# 7  
Old 06-24-2008
Try this one:
Code:
$ cat source
    1        2   -5.288000   -3.217000    4.035000     1 " " X " "    2   0.17850   0.00000 "car " " C1 " "    "    6   0 C1
    2       15   -5.385000   -3.069000    5.276000     1 " " X " "   70  -0.64780   0.00000 "car " " O1a" "    "    8   0 O1a
    3       18   -6.014000   -4.000000    3.392000     1 " " X " "   70  -0.64780   0.00000 "car " " O1b" "    "    8  -1 O1b
    4        3   -4.190000   -2.467000    3.295000     1 " " X " "    2   0.06130   0.00000 "car " " C2 " "    "    6   0 C2
    5        3   -3.620000   -3.260000    2.103000     1 " " X " "    2   0.09070   0.00000 "car " " C3 " "    "    6   0 C3
$ cat output
    1        2   -5.288000   -3.217000    4.035000     1 " " X " "    2   0.17850   0.00000 "CAR " " C1 " "    "    6   0    0    1 "C1" 0
    2       15   -5.385000   -3.069000    5.276000     1 " " X " "   70  -0.64780   0.00000 "CAR " " O1A" "    "    8   0    0    1 "O1A" 0
    3       18   -6.014000   -4.000000    3.392000     1 " " X " "   70  -0.64780   0.00000 "CAR " " O1B" "    "    8  -1    0    1 "O1B" 0
    4        3   -4.190000   -2.467000    3.295000     1 " " X " "    2   0.06130   0.00000 "CAR " " C2 " "    "    6   0    0    1 "C2" 0
    5        3   -3.620000   -3.260000    2.103000     1 " " X " "    2   0.09070   0.00000 "CAR " " C3 " "  1f"    6   0    0    1 "C3" 0
$ awk '{
          OFS=""
          a=toupper($0)
          b=substr(a,1,109)
          d=substr(a,112,10)"    0    1 \""
          e=substr(a,123)"\" 0"
          }
          {
            if(NR==5)c="1f"
            else c="  "
          }
          {
            print b,c,d,e
          }
' source > output1

$ diff -s output output1
Files output and output1 are identical


Previous Thread | Next Thread
Test Your Knowledge in Computers #471
Difficulty: Medium
Google recommends that users configure Google Public NTP together with non-leap-smearing NTP servers.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Interesting awk/Perl/sed parsing challenge

I have a log with entries like: out/target/product/imx53_smd/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/bindings/V8HTMLVideoElement.cpp : target thumb C++: libwebcore <=... (8 Replies)
Discussion started by: glev2005
8 Replies

2. Shell Programming and Scripting

awk/sed line parsing

I'm new to shell programming, but I think I learn best by following an example. I'm trying to cook up an awk/sed script, but I obviously lack the required syntax skills to achieve it. The output that I get from running my ksh script looks like this: I need to search each numbered line for... (10 Replies)
Discussion started by: iskatel
10 Replies

3. UNIX for Advanced & Expert Users

Parsing through a file with awk/sed

I don't necessary have a problem, as I have a solution. It is just that there may be a better solution. GOAL: Part one: Parse data from a file using the "\" as a delimiter and extracting only the last delimiter. Part two: Parse same file and extract everything but the last delimited item. ... (8 Replies)
Discussion started by: OrangeYaGlad
8 Replies

4. Shell Programming and Scripting

Parsing with awk or sed

I want to delete corrupt records from a file through awk or sed. Can anyone help me with this Thanks Striker Change subject to a descriptive one, ty. (1 Reply)
Discussion started by: Rahul_us
1 Replies

5. Shell Programming and Scripting

Another parsing line awk or sed problem

Hi, After looking on different forums, I'm still in trouble to parse a parameters line received in KSH. $* is equal to "/AAA:111 /BBB:222 /CCC:333 /DDD:444" I would like to parse it and be able to access anyone from his name in my KSH after. like echo myArray => display 111 ... (1 Reply)
Discussion started by: RickTrader
1 Replies

6. Shell Programming and Scripting

Line Parsing using sed and awk

Hi Guys, I need help with processing data in a file, line by line. My file test.txt has X_Building_X5946/X0 BUT/U_msp/RdBuMon_d2_B_00 BUT/U_msp/FfRmDaMix_d2_Pi3 Test_Long xp=849.416 yp=245.82 xn=849.488 yn=245.82 w=0.476 l=0.072 fault_layer="Al_T01_Mod" $ $X=849416 $Y=245582... (2 Replies)
Discussion started by: naveen@
2 Replies

7. Shell Programming and Scripting

String parsing with awk/sed/?

If I have a string that has some name followed by an ID#(ex.B123456) followed by some more #'s and/or letters, would it be possible to just grab the ID portion of this string? If so how? I am pretty new with these text tools so any help is appreciated. Example: "Name_One-B123456A-12348A" (2 Replies)
Discussion started by: airon23bball
2 Replies

8. Shell Programming and Scripting

awk/sed for parsing file

Hi All, I have a log file like this E Mon Oct 06 00:17:08 2008 xxx2 cm:10614 fm_pi2_svc_iptv_purchase.c:149 1:pin_deferred_act:10601:11:169:1223245028:16 pi2_op_svc_iptv_purchase error <location=PIN_ERRLOC_FM:5 class=PIN_ERRCLASS_SYSTEM_DETERMINATE:1... (10 Replies)
Discussion started by: subin_bala
10 Replies

9. Shell Programming and Scripting

parsing xml with awk/sed

Hi people!, I need extract from the file (test-file.txt) the values between <context> and </context> tag's , the total are 7 lines,but i can only get 5 or 2 lines!!:confused: Please look my code: #awk '/context/{flag=1} /\/context/{flag=0} !/context/{ if (flag==1) p rint $0; }'... (3 Replies)
Discussion started by: ricgamch
3 Replies

10. Shell Programming and Scripting

awk sed parsing

hi , i would like to parse some file with the fallowing data : data data data "unwanted data" data data "unwanted data" data data data data #unwanted data. what i want it to have any coments between "" and after # to be erased using awk or/and sed. has anyone an idea? thanks. (3 Replies)
Discussion started by: Darsh
3 Replies

Featured Tech Videos