ksh - adding a dynamic value to the front of a line

Hi Forum,

Im trying to write some code to read a file, take a certain dynamic value and write it back to the file at the front of every line.

For example, file.txt is:

SIMPLE=HELLO
CONFIDENTIAL=false
SENDER=false
REQUIRED=true
FEEDBACK=false
UPDATE=false
REQUIRED=false
MAPPING=true
SIMPLE=HELLO2
CONFIDENTIAL=false
SENDER=false
REQUIRED=true
FEEDBACK=false
UPDATE=false
REQUIRED=false

I want it to read the value of "SIMPLE", and return it back to the file at the front like so:

HELLO,SIMPLE=HELLO
HELLO,CONFIDENTIAL=false
HELLO,SENDER=false
HELLO,REQUIRED=true
HELLO,FEEDBACK=false
HELLO,UPDATE=false
HELLO,REQUIRED=false
HELLO,MAPPING=true
HELLO2,SIMPLE=HELLO2
HELLO2,CONFIDENTIAL=false
HELLO2,SENDER=false
HELLO2,REQUIRED=true
HELLO2,FEEDBACK=false
HELLO2,UPDATE=false
HELLO2,REQUIRED=false

Any help/ideas please?

thanks in advance

Ocelot

awk -F= '$1 ~ /SIMPLE/ {a=$2; print a","$0; next} {print a","$0}' infile
HELLO,SIMPLE=HELLO
HELLO,CONFIDENTIAL=false
HELLO,SENDER=false
HELLO,REQUIRED=true
HELLO,FEEDBACK=false
HELLO,UPDATE=false
HELLO,REQUIRED=false
HELLO,MAPPING=true
HELLO2,SIMPLE=HELLO2
HELLO2,CONFIDENTIAL=false
HELLO2,SENDER=false
HELLO2,REQUIRED=true
HELLO2,FEEDBACK=false
HELLO2,UPDATE=false
HELLO2,REQUIRED=false

Hi zaxxon,

thanks for the reply. The solution kinda works...but only for the first 9 lines. It then appends the rest of the file with "false" or "true", e.g.

HELLO,SIMPLE=HELLO
HELLO,CONFIDENTIAL=false
HELLO,SENDER=false
HELLO,REQUIRED=true
HELLO,FEEDBACK=false
HELLO,UPDATE=false
HELLO,REQUIRED=false
HELLO,MAPPING=true
false,TEST1=true
false,TEST2=false,
false,TEST3=false,
false,TEST4=true

etc... any ideas?

thanks!

Hm... works with me. I edited the post inbetween since I forgot the "next". Here is the output of my box:

root@isau02:/data/tmp/testfeld> cat infile
SIMPLE=HELLO
CONFIDENTIAL=false
SENDER=false
REQUIRED=true
FEEDBACK=false
UPDATE=false
REQUIRED=false
MAPPING=true
SIMPLE=HELLO2
CONFIDENTIAL=false
SENDER=false
REQUIRED=true
FEEDBACK=false
UPDATE=false
REQUIRED=false
root@isau02:/data/tmp/testfeld> awk -F= '$1 ~ /SIMPLE/ {a=$2; print a","$0; next} {print a","$0}' infile
HELLO,SIMPLE=HELLO
HELLO,CONFIDENTIAL=false
HELLO,SENDER=false
HELLO,REQUIRED=true
HELLO,FEEDBACK=false
HELLO,UPDATE=false
HELLO,REQUIRED=false
HELLO,MAPPING=true
HELLO2,SIMPLE=HELLO2
HELLO2,CONFIDENTIAL=false
HELLO2,SENDER=false
HELLO2,REQUIRED=true
HELLO2,FEEDBACK=false
HELLO2,UPDATE=false
HELLO2,REQUIRED=false

I think I know why...its because I have another variable called SIMPLE_SET_ID.

Question - how can the awk statement be changed to search on just "SIMPLE" only? I tried putting % around SIMPLE but this didnt work...

thanks

Ocelot

In this case you have to tell awk to use explicit field content like

awk -F= '$1 ~ /^SIMPLE$/ {a=$2; print a","$0; next} {print a","$0}' infile

or

awk -F= '$1 == "SIMPLE" {a=$2; print a","$0; next} {print a","$0}' infile

thats worked perfectly...!

thanks a lot for your help!

ocelot

Hi,

Just one more query on this...

How can I get the name of the file, eg file.txt appended to the beginning of every line too? eg to get:

file.txt,HELLO,SIMPLE=HELLO
file.txt,HELLO,CONFIDENTIAL=false
file.txt,HELLO,SENDER=false

etc

thanks!

awk -F= '$1 ~ /SIMPLE/ {a=$2; print FILENAME,a,$0; next} {print FILENAME,a,$0}' OFS=, file.txt
file.txt,HELLO,SIMPLE=HELLO
file.txt,HELLO,CONFIDENTIAL=false
file.txt,HELLO,SENDER=false
file.txt,HELLO,REQUIRED=true
file.txt,HELLO,FEEDBACK=false
file.txt,HELLO,UPDATE=false
file.txt,HELLO,REQUIRED=false
file.txt,HELLO,MAPPING=true
file.txt,HELLO2,SIMPLE=HELLO2
file.txt,HELLO2,CONFIDENTIAL=false
file.txt,HELLO2,SENDER=false
file.txt,HELLO2,REQUIRED=true
file.txt,HELLO2,FEEDBACK=false
file.txt,HELLO2,UPDATE=false
file.txt,HELLO2,REQUIRED=false

fantastic.

thanks very much!

ocelot