[All variants] Change settings


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting [All variants] Change settings
# 1  
Old 02-27-2017
[All variants] Change settings

Hi, I have a big settings confg (file attached). There are a few separate tasks that I have to accomplish. All scripting/programming languages are appreciated.

1. I need to parse all values and output to stdout. Sample output (truncated):
Code:
VALUEA
2017-01-01
Lores ipsum
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

VALUEB
2017-02-02
...

2. I need to create a new setting DATEB and write it to file before TEXT by adding n days to value of DATEA. For example here I added 300 days (truncated):
Code:
#SETTINGSBEGIN VALUEA
#DATEA 2017-01-01
...
#DATEB 2017-10-28
TEXT
...
#SETTINGSEND

#SETTINGSBEGIN VALUEB
#DATEA 2017-02-02
...
#DATEB 2017-11-29
TEXT
...
#SETTINGSEND

#SETTINGSBEGIN VALUEС
#DATEA 2017-03-03
...
#DATEB 2017-12-28
TEXT
...
#SETTINGSEND

# 2  
Old 02-27-2017
You could use GNU awk like this:

Code:
gawk -v ADD_DAYS=300 '
 /#DATEA/ {
   DT = mktime(gensub(/-/, " ", "g", $2) " 0 0 0")
   DT += 24*60*60*ADD_DAYS
 }
 /#TEXT/ {
   print strftime("#DATEB %Y-%m-%d", DT)
 }
 1' settings.txt > settings_new.txt


Last edited by Chubler_XL; 02-27-2017 at 09:49 PM..
This User Gave Thanks to Chubler_XL For This Post:
# 3  
Old 02-27-2017
You could try this in bash script, it does require GNU date for the date calculations:

Code:
#!/bin/bash
ADD_DAYS=300
while read line
do
    [[ "$line" = [#]DATEA\ * ]] && DB=$(date -d "${line#*DATEA } + ${ADD_DAYS}days" +%Y-%m-%d)
    [[ "$line" = [#]TEXT ]] && echo "#DATEB $DB"
    echo "$line"
done < settings.txt > settings_new.txt

This User Gave Thanks to Chubler_XL For This Post:
# 4  
Old 02-27-2017
Thanks again.

But how can I parse that file? Is it possible?
# 5  
Old 02-28-2017
Yes the code in #3 above is parsing the file, it is only interested in lines that begin with "#DATEA "; or are equal to "#TEST".

What processing do you want to do with the file? Perhaps if you post your desired output.
# 6  
Old 02-28-2017
I just want to output to stdout. This is the desired output:
Quote:
Code:
VALUEA
2017-01-01
Lores ipsum
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

VALUEB
2017-02-02
...


Last edited by useretail; 02-28-2017 at 11:54 AM..
# 7  
Old 02-28-2017
OK sorry for the misunderstanding.

Here is a GNU awk solution:

Code:
gawk -v ADD_DAYS=300 '
/#DATEA/ {
  DT = mktime(gensub(/-/, " ", "g", $2) " 0 0 0")
  DT += 24*60*60*ADD_DAYS
  printf "VALUEA\n%s\n", $2
}
/#VALUE TITLE/ { print gensub(/.*"([^"]+)"/, "\\1","g") }
/#SETTINGSEND/ { print strftime("\nVALUEB\n%Y-%m-%d", DT) }
!/^#/' settings.txt

and here is bash version:

Code:
#!/bin/bash
ADD_DAYS=300
while read line
do
    if [[ "$line" = \#DATEA\ * ]]
    then
       DA=${line#*DATEA }
       DT=$(date -d "$DA + ${ADD_DAYS}days" +%Y-%m-%d)
       printf "VALUEA\n%s\n" "$DA"
    fi
    if [[ "$line" = \#VALUE\ TITLE=* ]]
    then
        line=${line%\"}
        echo "${line#*\"}"
    fi
    [[ "$line" = \#SETTINGSEND* ]] && printf "\nVALUEB\n%s\n" "$DT"
    [[ "$line" = \#* ]] || echo "$line"
done < settings.txt

edit: This bash solution uses a case statement, which I think looks a bit cleaner than the one above:

Code:
#!/bin/bash
ADD_DAYS=300
while read line
do
    case "$line" in
        [#]DATEA\ *)
           DA=${line#*DATEA }
           DT=$(date -d "$DA + ${ADD_DAYS}days" +%Y-%m-%d)
           printf "VALUEA\n%s\n" "$DA" ;;
        [#]VALUE\ TITLE=*)
            line=${line%\"}
            echo "${line#*\"}" ;;
        [#]SETTINGSEND*) printf "\nVALUEB\n%s\n" "$DT" ;;
        [#]*) ;;
        *) echo "$line" ;;
    esac
done < settings.txt


Last edited by Chubler_XL; 02-28-2017 at 03:38 PM..
This User Gave Thanks to Chubler_XL For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

[All variants] remove first pair of parentheses

How to remove first pair of parentheses and content in them from the beginning of the line? Here's the list: (ok)-test (ok)-test-(ing) (some)-test-(ing)-test test-(ing) Desired result: test test-(ing) test-(ing)-test test-(ing) Here's what I already tried with GNU sed: sed -e... (6 Replies)
Discussion started by: useretail
6 Replies

2. UNIX for Dummies Questions & Answers

Change default settings of nslookup

how and where can i change permanent the settings of nslookup? each time i change it by doing nslookup set timeout=2 the nslookup , does not save the settings , how can i do it in permanent way? (2 Replies)
Discussion started by: prpkrk
2 Replies

3. Red Hat

Change user settings..

Hi, I have 48 cores in my server. I want to assign 50% of the cores to certain programs and rest to some other programms. I found the command "taskset" very good option to assign cpu afinity to already running programms or newly created programms. But the problem is even if i set a cron to... (1 Reply)
Discussion started by: Rantu
1 Replies

4. AIX

Settings change in aix

Hi Can any one tell the procedure to change the maxpout and minpout settings on AIX (1 Reply)
Discussion started by: newtoaixos
1 Replies

5. Solaris

Putty : Change default settings (solved)

Hi, I use to work on solaris via putty and always on session start - i use to increase the font to 14 bold - capture session output to a file my requirement) to make these changes permanent, so that i need not to change the settings everytime i connect via putty please advice. ... (0 Replies)
Discussion started by: saurabh84g
0 Replies

6. Solaris

effect of change of mpd preferred path settings

Hello All, In the output of the command "mpdcontrol -no xlist", I found that, some of the preferred paths are marked as "err". You can see the output below: # mpdcontrol -noxlist Unit Dev# MPD_ID/Policy DeviceName FC_AL DevMajMin IOcnt State... (0 Replies)
Discussion started by: sundar3350
0 Replies

7. HP-UX

command to change duplex settings..

Hi Folks, I want the command to change the duplex settings of a HP-UX server. Thanks in advance. Sagar. (2 Replies)
Discussion started by: sag71155
2 Replies

8. UNIX for Dummies Questions & Answers

How to change root's .profile settings

As a regular (non-root) user on Unix servers I'm accustomed to changing my .profile file to set paths that I frequently use, etc. I am trying to learn unix and set up a test server running SunOS 5.8. When I login as root I don't see a .profile file that belongs to root wherein I could change the... (1 Reply)
Discussion started by: FredSmith
1 Replies

9. Solaris

how do I change locale settings?

I support a product which writes to log files and it's currently formatting the date in US format. I've established this is due to these settings: account1# locale -k d_fmt t_fmt d_fmt="%m/%d/%y" t_fmt="%H:%M:%S" If I log on with a different account the settings are different: ... (1 Reply)
Discussion started by: m223464
1 Replies
Login or Register to Ask a Question