Sponsored Content
Top Forums Shell Programming and Scripting Find and change flag "Yes to No" or "No to Yes" Post 302409208 by rafazz on Wednesday 31st of March 2010 11:36:28 AM
Old 03-31-2010
Quote:
Originally Posted by ahmad.diab
easy:-


Code:
echo "Kindly insert the name:- "
read name
perl -i -wlanF'\:' -e '$F[2] =~ s/yes/no/i or $F[2] =~ s/no/yes/i if $F[0] eq "'$name'"  ;$"=":" ;  print "@F" ; ' infile.txt

SmilieSmilieSmilie

BR

DONE!!!! Thanks Smilie

---------- Post updated at 10:36 AM ---------- Previous update was at 10:34 AM ----------

Quote:
Originally Posted by kshji
This solution is much more as you need, previous awk solutions are enough.

This is example template how to parse csv style file using first line = name of variables.
After parsing you can use column value using variable name. Of course you need some error checking and so on, but some simple template to start.

Code:
#!/bin/ksh or bash
cat<<EOF > $0.txt
name:age:girlfriend
aa:11:yes
bb:22:yes
cc:33:no
dd:44:no
ee:55:yes
ff:44:
:44:no
aa:55:no:xx:zz
EOF


lastfld=0
flds[0]=""
val[0]=""
oifs="$IFS"
deli=":"

#####################################
setvar()
{
   str="$*"
   IFS="$deli"
   val=($str)
   IFS="$oifs"
   last=${#val[@]}
   f=0
   while (( f<=last && f<=lastfld ))
   do
        var="${flds[$f]}"
        value="${val[$f]}"
        eval $var=\"$value\"
        ((f+=1))
   done
}
#####################################
showvar()
{
   f=0
   outstr=""
   de="$deli"
   while ((f<=lastfld))
   do
        var="${flds[$f]}"
        eval value=\""\$$var"\"
        (( f == lastfld )) && de=""
        outstr="$outstr$value$de"
        ((f+=1))
   done
   echo "$outstr"
}

#####################################
clrvar()
{
   f=0
   while (( f <= lastfld ))
   do
        var="${flds[$f]}"
        eval $var=\"\"
        export $var
        ((f+=1))
   done
}

#####################################
colnames()
{   
    str="$*"
    IFS="$deli"
    flds=($str)
    IFS="$oifs"
    lastfld=${#flds[@]}
    ((lastfld-=1))
}
#####################################
# MAIN #
lineno=0
cat $0.txt | while read line
do  
    ((lineno+=1))
    (( lineno == 1 )) && colnames "$line" && continue
    clrvar   # clear all variables before new values
    setvar "$line"
    # after line parsing you can use variables 
    case "$name" in
        cc) girlfriend=yes ;;
    esac

    showvar
done

Keywords: csv ksh bash csv parser
Wow GREAT! I will use this for another porpose in my program Smilie thanks!
 

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies

2. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

3. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

4. Shell Programming and Scripting

Awk,sed : change every 2nd field ":" to "|"

Hi Experts, I have a string with colon delimited, want 2nd colon to be changed to a pipe. data: 101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3: I am trying with sed, but can change only 1 occurance: echo "101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3:" | sed 's/:/|/2'... (5 Replies)
Discussion started by: rveri
5 Replies

5. Shell Programming and Scripting

Find lines with "A" then change "E" to "X" same line

I have a bunch of random character lines like ABCEDFG. I want to find all lines with "A" and then change any "E" to "X" in the same line. ALL lines with "A" will have an "X" somewhere in it. I have tried sed awk and vi editor. I get close, not quite there. I know someone has already solved this... (10 Replies)
Discussion started by: nightwatchrenba
10 Replies

6. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

7. Shell Programming and Scripting

find . -path "*_nobackup*" -prune -iname "*.PDF" \( ! -name "*_nobackup.*" \)

These three finds worked as expected: $ find . -iname "*.PDF" $ find . -iname "*.PDF" \( ! -name "*_nobackup.*" \) $ find . -path "*_nobackup*" -prune -iname "*.PDF" They all returned the match: ./folder/file.pdf :b: This find returned no matches: $ find . -path "*_nobackup*" -prune... (3 Replies)
Discussion started by: wolfv
3 Replies

8. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

9. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies
All times are GMT -4. The time now is 04:18 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy