Shell script to read specified value from file and echo to the same location to other file.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Shell script to read specified value from file and echo to the same location to other file.
# 1  
Old 08-31-2014
Lightbulb Shell script to read specified value from file and echo to the same location to other file.

Hello.
I want to to backup some "default:" values from a file do some other job and after restore that "default:" values back.

The problem is that the source and destination file has a lot of default: strings in it but with different values...

So..
Here is an example:

A part of my source file named "config.json".

Code:
    { SPane:{ 
        title:"Blinking effect",
        description:"Control the way the LED blinks."
    }},
    { SCheckBox:{
        description:"Completely disable led notifications.", 
        label:"Disable LED",
        default:0,
                action:"generic /sys/class/sec/led/led_completely_disable"
    }},
    { SCheckBox:{
        description:"If disabled, the controller bypasses slope generation.", 
        label:"Enable LED fading",
        default:1,
                action:"generic /sys/class/sec/led/led_fade"
    }},
    { SSeekBar:{
        title:"Fade-in time period",
        description:"Sets the time period of the rising slope.",
        min:0, max:12, unit:"ms", step:1,
        default:2,
                action:"generic /sys/class/sec/led/led_fade_in_time"
    }},
    { SSeekBar:{
        title:"Fade-out time period",
        description:"Sets the time period of the falling slope.",
        min:0, max:20, unit:"ms", step:1,
        default:8,
                action:"generic /sys/class/sec/led/led_fade_out_time"
    }},

With the code:
Code:
echo "$(cat config.json | grep default: | awk -F default '{print $2 }' | awk -F , '{print $1 }')" > def;

This it will output all default values to "def" file.
Like:
Code:
:0
:1
:2
:8

Note that some values also have strings in it...

So after some other commands the source file change those default values and simply Smilie i want to restore those values from "def" file to "config.json" file.

Wish to explain it ok.

Thanks

Last edited by ausdim; 08-31-2014 at 01:58 PM..
# 2  
Old 08-31-2014
Lightbulb

Following might work for you:

"Save" default values
Code:
$ grep default: config.json >def

"Restore" script:
Code:
#!/bin/bash

#following command requires bash 4
readarray -t arr <def
index=0

function replace {
 echo "${arr[$index]}"
 index=$((index+1))
}

while IFS= read line
do
  if [[ "$line" =~ "default:" ]]; then
   replace
  else
   echo "$line"
  fi
done <config.json >config.json.new

# mv config.json.new config.json

Script explanation: config.json is read line by line. If the line contains a default: string, the first occurrence of default: gets replaced with the first occurrence of default: from the def file, else the (unmodified) line is printed. Whole output is redirected to config.json.new, which basically creates a new config.json file. Uncomment the last line if you're happy with the output.
This User Gave Thanks to junior-helper For This Post:
# 3  
Old 08-31-2014
Quote:
Originally Posted by junior-helper
Following might work for you:

"Save" default values
Code:
$ grep default: config.json >def

"Restore" script:
Code:
#!/bin/bash

#following command requires bash 4
readarray -t arr <def
index=0

function replace {
 echo "${arr[$index]}"
 index=$((index+1))
}

while IFS= read line
do
  if [[ "$line" =~ "default:" ]]; then
   replace
  else
   echo "$line"
  fi
done <config.json >config.json.new

# mv config.json.new config.json

Script explanation: config.json is read line by line. If the line contains a default: string, the first occurrence of default: gets replaced with the first occurrence of default: from the def file, else the (unmodified) line is printed. Whole output is redirected to config.json.new, which basically creates a new config.json file. Uncomment the last line if you're happy with the output.
The code is working exactly as i want but i forgot to say that it will used on an android device - terminal...

So as i use it in android terminal i change:
Code:
#!/system/bin/sh

but it gives me:
Code:
line[4]:readarray: not found
line[14]: syntax error: '=~' unexpected operator/operand

Many thanks
# 4  
Old 09-01-2014
That is really too bad, because almost everything is bash-specific in my script. Unfortunately I have no prerequisites to help you further. I could rewrite it in perl, if it's an option.
This User Gave Thanks to junior-helper For This Post:
# 5  
Old 09-01-2014
You could try this instead, which is a translation of junior-helper's "restore" bash 4 code into more universal shell code and should run in any POSIX compliant shell, including bash and ksh:

Code:
while IFS= read -r line
do
  case $line in
    (*default:*) IFS= read -r line <&3
  esac
  printf "%s\n" "$line"
done <config.json 3<def >config.json.new

# mv config.json.new config.json

These 2 Users Gave Thanks to Scrutinizer For This Post:
# 6  
Old 09-01-2014
Change your awk backup so it saves the rest of the default: line
Code:
awk '/default:/ {sub (/.*default/,""); sub (/,.*/,","); print}' config.json >def

Or with sed
Code:
sed '/default:/!d; s/.*default//; s/,.*/,/' config.json >def

And restore with the following shell script
Code:
while read line
do
  case $line in
  *default:*)
    read replace <&3
    echo "$line" | sed 's/\(.*default\)[^,]*\(.*\)/\1'"$replace"'/'
  ;;
  *)
    echo "$line"
  esac
done < config.json 3< def > config.json.new
# mv config.json.new config.json

---------- Post updated at 03:08 PM ---------- Previous update was at 02:48 PM ----------

I didn't see Junior's proposal. Storing the whole line is most efficient!
And missed Scrutinizer's post. Go for that one!
This User Gave Thanks to MadeInGermany For This Post:
# 7  
Old 09-01-2014
Quote:
Originally Posted by junior-helper
That is really too bad, because almost everything is bash-specific in my script. Unfortunately I have no prerequisites to help you further. I could rewrite it in perl, if it's an option.
After compiled bash for arm your script is working... Smilie

Quote:
Originally Posted by Scrutinizer
You could try this instead, which is a translation of junior-helper's "restore" bash 4 code into more universal shell code and should run in any POSIX compliant shell, including bash and ksh:

Code:
while IFS= read -r line
do
  case $line in
    (*default:*) IFS= read -r line <&3
  esac
  printf "%s\n" "$line"
done <config.json 3<def >config.json.new

# mv config.json.new config.json

Exactly what i want...
Working also on arm without any further requirements. Smilie

Many thanks to all of you.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Shell Script to Read the given file contents into a merged one file

Like to have shell script to Read the given file contents into a merged one file with header of path+file name followed by file contents into a single output file. While reading and merging the file contents into a single file, Like to keep the format of the source file. ... (4 Replies)
Discussion started by: Siva SQL
4 Replies

2. Shell Programming and Scripting

File transfer from UNIX to shared location using shell script

Is there any possible way transfering the file from unix to shared location using shell script. i had created the batch script to fetch the files from unix to shared location and it works fine. Due to some problem in windows unable to transfer the file to shared location automatically. can anyone... (2 Replies)
Discussion started by: venkat918
2 Replies

3. Shell Programming and Scripting

How to read each line from input file, assign variables, and echo to output file?

I've got a file that looks like this (spaces before first entries intentional): 12345650-000005000GL140227 ANNUAL HELC FEE EN 22345650-000005000GL140227 ANNUAL HELC FEE EN 32345650-000005000GL140227 ANNUAL HELC FEE EN I want to read through the file line by line,... (6 Replies)
Discussion started by: Scottie1954
6 Replies

4. Shell Programming and Scripting

Shell script to read file and check file type

Hi, I have a file with few values in it. I need script help to read file line by line and check: 1/if it's a file (with extension eg .java .css .jar etc ) or 2/if it's a file without extension and treat it as a directory and then check if the directory exists in working copy else create one... (6 Replies)
Discussion started by: iaav
6 Replies

5. Shell Programming and Scripting

shell script to add input at certain location into a file

Hi, I am using Solaris 10 OS and trying to create shell script that can add input at certain location into a file. The input that I am trying to put is new domain name e.g @newdomain.com the file contains, more test01.out user/zzzz786@st.com/INBOX user/zzzz@po.com/INBOX... (8 Replies)
Discussion started by: Mr_47
8 Replies

6. Shell Programming and Scripting

echo ls to a file and then read file and selectively delete

I'm trying to write a script that will do an ls of a location, echo it into a file, and then read that file and selectively delete files/folders, so it would go something like this: cd $CLEAN_LOCN ls >>$TMP_FILE while read LINE do if LINE = $DONTDELETE skip elseif LINE =... (2 Replies)
Discussion started by: MaureenT
2 Replies

7. Shell Programming and Scripting

Write shelll script to read file location

hi all i have a problem how to read file location..I read file as FILE=/home/tmp/new.file.but t is not useful for me.But i want my script read file location where the file is and copy in directory at boot time. Every time of booting files are copied in respective folder.please help !!!!:) (2 Replies)
Discussion started by: shubhig15
2 Replies

8. Shell Programming and Scripting

Bash script to read file location

I'm writing a bash script that reads a file location from a user, and I'm wondering how to get the script to accept tab to auto complete the directories that are input. (8 Replies)
Discussion started by: Prodiga1
8 Replies

9. Shell Programming and Scripting

how to read dbf file in shell script and to convert dbf file usinf shell script

Hi all, I am new to shell scripting. I have dbf file and I need to convert it into csv file. OR, can i read the fields from a .dbf file and OR seprate the records in dbf file and put into .csv or txt. Actually in the .dbf files I am getting , the numbers of fields may vary in very record and... (6 Replies)
Discussion started by: gauara
6 Replies

10. Shell Programming and Scripting

Need shell script to read two file at same time and print out in single file

Need shell script to read two file at same time and print output in single file Example I have two files 1) file1.txt 2) file2.txt File1.txt contains Aaa Bbb Ccc Ddd Eee Fff File2.txt contains Zzz Yyy Xxx (10 Replies)
Discussion started by: sreedhargouda
10 Replies
Login or Register to Ask a Question