System function in awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting System function in awk
# 1  
Old 04-02-2013
System function in awk

Hello Friends,

I have written a script like below,

I aimed to move some CDR files (call data record) whose the last field is "1" (NF=1 ) from a spesific directory to a new directory
Field Seperator is pipe.
If the directory does not exitst i should create it.
I will give the script two arguments so i check if they are given or not

Here I have written this; Im suspicious if the below system function in awk will work or not, appreciate your opinions.

Code:
if [ "$#" -ne 2 ]
then
	echo 
	echo "--- There are two arguments which is expected after script! ---"
	echo "--- USAGE: "$0" | FULL PATH of NEPS DIRECTORY | NEW FULL PATH for INITIALLY CHARGED CDRs ---"
	echo
elif [ "$#" -eq 2 ]
then
	if [ ! -d $2 ];
	then
		mkdir $2
	fi
	
	for file in `find $1 -type f -name "*cdr*.txt" 2>/dev/null`
	do
		nawk -F\| -v PATH=$2 'NR==1{ if $NF==1 system( "mv FILENAME PATH/FILENAME ") }'
	done;
fi

Thanks in advance
BR
# 2  
Old 04-02-2013
Why don't you just try it prepending the mv cmd with an echo?
BTW, your nawk does need an input file!

And, why do you use awk and not just shell? Try:
Code:
$ read A <"$file"
$ echo ${A##* }
1

# 3  
Old 04-02-2013
Quote:
Originally Posted by RudiC
Why don't you just try it prepending the mv cmd with an echo?
BTW, your nawk does need an input file!

And, why do you use awk and not just shell? Try:
Code:
$ read A <"$file"
$ echo ${A##* }
1

Hello Rudic,

Thanks for replying,

awk came to my mind first, as i need to check value of last field of first lines of cdr files and dont have much idea how to do it as you shown..

Besides I dont know what exactly
Code:
echo ${A##* }

is
## is longest matching pattern?

KR
EAGLE
# 4  
Old 04-02-2013
## is "strip longest match from the front". So it'll find the longest pattern ending in space that it can, from the front.

Code:
FIRST="$1"
SECOND="$2"

OLDIFS="$IFS"
IFS="|"
find "$FIRST" -type f -name "*cdr*.txt" 2>/dev/null | while read FILE
do
        IFS="" read LINE <"$FILE" || continue
        set -- $LINE
        shift $(($# - 1)) # Get rid of all but last option

        [ "$1" = "1" ] || continue
        echo mv a b # Not sure what you want to move where here
done

You may need to show the relevant line from the CDR file if this doesn't work.
# 5  
Old 04-02-2013
Quote:
Originally Posted by Corona688
## is "strip longest match from the front". So it'll find the longest pattern ending in space that it can, from the front.

Code:
FIRST="$1"
SECOND="$2"

OLDIFS="$IFS"
IFS="|"
find "$FIRST" -type f -name "*cdr*.txt" 2>/dev/null | while read FILE
do
        IFS="" read LINE <"$FILE" || continue
        set -- $LINE
        shift $(($# - 1)) # Get rid of all but last option

        [ "$1" = "1" ] || continue
        echo mv a b # Not sure what you want to move where here
done

You may need to show the relevant line from the CDR file if this doesn't work.
Thanks for help Corona;

I have solved my problem but I will keep this solution on my mind too. I have lack of shell scripting skills so sometimes cant see all solutions; i go for diffucult solutions maybe without knowing Smilie

Let me share my solution too to show how i solved:

Code:
if [ "$#" -ne 2 ]
then
        echo 
        echo "--- There are two arguments which is expected after script! ---"
        echo "--- USAGE: "$0" [FULL PATH of CDR DIRECTORY] [NEW FULL PATH for INITIALLY CHARGED CDRs] ---"
        echo "--- i.e. "$0" /opt/data/cdr /opt/data/cdr_initial ---"
        echo
elif [ "$#" -eq 2 ]
then
        NEWPATH=$2
        first_char=$"NEWPATH:0:1"
        echo "$first_char"
		 
        if [ "$first_char" -eq "/" ]
        then    
                if [ ! -d "$NEWPATH" ];
                then
                        mkdir $NEWPATH
                fi      
        else
                echo 
                echo "--- There are two arguments which is expected after script! ---"
                echo "--- USAGE: "$0" [FULL PATH of CDR DIRECTORY] [NEW FULL PATH for INITIALLY CHARGED CDRs] ---"
                echo "--- i.e. "$0" /opt/data/cdr /opt/data/cdr_initial ---"
                echo
        fi
        for file in `find $1 -type f -name "*.txt" 2>/dev/null`
        do
                nawk -F\| -v path=$2 'NR==1{if($NF==1)system( "mv "FILENAME" "path"/" )}' $file
        done
fi

Kind Regards
# 6  
Old 04-02-2013
If you're running awk once per loop, you've probably picked the hard way, yes.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need help on awk for printing the function name inside each function

Hi, I am having script which contains many functions. Need to print each function name at the starting of the function. Like below, functionname() { echo "functionname" commands.... } I've tried like below, func=`grep "()" scriptname | cut -d "(" -f1` for i in $func do nawk -v... (4 Replies)
Discussion started by: Sumanthsv
4 Replies

2. UNIX for Dummies Questions & Answers

passing coloumn value to system function in awk

Hi all, I have a file which contain data like 1|2009-12-12 2|2010-02-28 3|2009-02-29 i have to validate that second coloumn have proper date i tried like awk -F "|" ' !system("touch -d $2 file1 2> /dev/null" ) ' but its not printing any thing but when i try using hard... (2 Replies)
Discussion started by: max_hammer
2 Replies

3. Shell Programming and Scripting

Help using SYSTEM function in NAWK

I am scanning a file (line by line) for format errors. A line could have multiple errors. Each field in the line is evaluated for errors and sent, along w/ any error messages, to a temporary file. Finally, if any errors were detected, this temporary file is then appended to the errorFile. The... (4 Replies)
Discussion started by: aschera
4 Replies

4. UNIX for Dummies Questions & Answers

Using system function in C

Hi Guys , I want to use system function in C to do the following work. cp <file1> <file2> and then ><file1> e,g cp \var\log\cpm_cpmd_1.log.1 \var\log\cpm_cpmd_1.log.2 and then >\var\log\cpm_cpmd_1.log.1 1. g_config_info.cpmm_config.cpm_log_path=\var\log\ 2. ... (3 Replies)
Discussion started by: meet123321
3 Replies

5. Shell Programming and Scripting

How to use system function in awk

Could any one tell me how to use the system function in awk? I want to use it to print the system date. I have been trying like this : yes |head -1|awk '{ system("date")}' When I execute the above it always returns back to the prompt. Your help would be much appreciated. regards,... (3 Replies)
Discussion started by: srikanth_ksv
3 Replies

6. Programming

Question about the system() function in C

Hello all ! Could someone throw some light on whether there's a limit to the number of characters contained in the command string that is passed to the system() call in C. Is it OS dependent? If yes, what are the limits for each? Thanks. (4 Replies)
Discussion started by: vsanjit
4 Replies

7. UNIX for Dummies Questions & Answers

How to use ${?} and system() function???

Hi All, I am in a process to send the mail automatically with an attachment to bulk users. I have used 'Mailx' and 'Unencode' commands for the same and those worked fine. Please find below the same. X " ( cat /sastemp/body.txt; uuencode test.xls test.xls ) | mailx -s 'testing'... (1 Reply)
Discussion started by: manas6
1 Replies

8. Shell Programming and Scripting

shell function, system, awk

Hi all, I am calling a shell function within awk using system. I am struggling to get my expected output: #!/bin/sh set -o nounset BEG=44 END=55 shfun() { echo "1|2|3" } export -f shfun typeset -F > /dev/null awk 'BEGIN {OFS="|"; print "'"$BEG"'",system( "shfun"... (5 Replies)
Discussion started by: jkl_jkl
5 Replies

9. UNIX for Dummies Questions & Answers

System() function in <stdlib.h>

Hi, guys ,, I want to know the implementation of System() function in C Unix, and its prototype definition: int system(const char * string) in the header file <stdlib.h> ??! please help me ! because that is part of my project !! (0 Replies)
Discussion started by: someone33
0 Replies

10. Programming

system function in c

Hai Friends I have used the function system() to execute a command. My requirement is that i have to list the files in a directory applying some wildcard paterns. For example if i want to list *.c files i go with the function system("ls *.c"); and the output gets printed on the monitor.... (1 Reply)
Discussion started by: collins
1 Replies
Login or Register to Ask a Question