Tricky Shell script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Tricky Shell script
# 15  
Old 08-13-2007
When i checked the count of fields with your input it gives 15.
Check below

Code:
echo "02 00 00 34 41 00 00 70 81" | sed "s/ /,/g;s/00,*//g;s/,$//g" | wc -c

# 16  
Old 08-13-2007
MySQL

lorcan,
When i ran the script it tells

./testingscript testingdata
cat: cannot open /export/home/niit-dev/Output.txt
The contents of the outFile are
The count_fields is 45
The count_fields is 45
The count_fields is 45
The count_fields is 45
The count_fields is 45
The count_fields is 45
The count_fields is 45
The count_fields is 45
cut: cannot open /export/home/niit-dev/Output.txt
cut: cannot open /export/home/niit-dev/Output.txt
Check the 1 field of the INPUT FILE

My input file is ---
00,11,21,00,00,55,00,73,83,07,00,22,39,43,00,66,00,00,00,15,00,00,44,58,67,00,87
02,14,24,30,00,00,00,70,00,00,00,00,32,47,50,60,74,00,04,16,27,38,00,00,00,00,89
00,00,00,00,42,52,61,71,86,01,00,29,33,00,59,00,75,00,03,19,00,00,45,00,68,00,88
00,13,20,31,00,00,64,76,00,05,00,00,35,41,56,00,00,81,00,00,28,00,00,57,65,79,90
06,10,00,36,40,00,00,00,80,00,12,25,00,00,51,62,72,00,09,00,00,37,49,00,69,00,84

In this the total number of count should be 15,
when i ran with my input file it shows 45 numbers whether it should be 15 because only 15 digits are there leaving all 00.

while what u suggested that only have 5 digits leaving all 00,means that should show 5 numbers only but the input file which u r follwing in that 3 rows make a line for testing purpose so that whole line should have total 15 numbers...

still it shows the same error outFile cannot be opened.
I am also trying to debug but being a novice i am not finding it.
can you try that with the inputfile which i provided.
# 17  
Old 08-13-2007
Quote:
Originally Posted by namishtiwari
I have to write a shell script for the following problem.I am a novice in this area.Please help me out all Guru's.

02 00 00 34 41 00 00 70 81
00 14 20 37 00 53 63 00 00
09 18 23 00 45 00 00 79 00

I have to write a shell script like this...

1. In a row there are 9 entries but there should be exactly 5 entries in a row.
We need to neglect 00 they are just to fill the positions but of no use so ignore them.,

2. In a column there should be minimum 1 entry and if more than that then in ascending order only.
For this req i had written the script. For other it was already complete right. I hope you use two input files one with 9 entries and other as mentioned above
# 18  
Old 08-13-2007
MySQL

lorcan,
Thanks for the inputs first.
i guess you did not get the requirement fully.

i mentioned clearly that in a row there should be exactly 5 entries and total for ticket it shoud be 15.E.g.

02 00 00 34 41 00 00 70 81
00 14 20 37 00 53 63 00 00
09 18 23 00 45 00 00 79 00

This is a ticket and in a row there should be only 5 entries we should ignore the 00,and totally it should be 15 for a ticket ignoring all 00.Like this(Ticket) there are 200thousand values.

Did you get it?..
# 19  
Old 08-13-2007
This script checks for the 15 tickets in a row and also checks if there are 5 tickets within every 9 columns.

And as a whole i am checking whether there are atleast one ticket in a column and arranged in ascending order.

Code:
#!/bin/ksh

inpFile=$1
outFile="$HOME/Output.txt"

tmpFile1="/tmp/sample1.txt"
tmpFile2="/tmp/sample2.txt"
TOTAL_FILEDS=27
COUNT=1
rm -f $outFile
for line in $(cat $inpFile)
do
        count_fields=$(echo $line | sed "s/00,*//g;s/,$//g" | wc -c)
        cnt_flds1=$(echo $line | cut -d',' -f1-9 | sed "s/00,*//g;s/,$//g" | wc -c )
        cnt_flds2=$(echo $line | cut -d',' -f10-18 | sed "s/00,*//g;s/,$//g" | wc -c )
        cnt_flds3=$(echo $line | cut -d',' -f19-27 | sed "s/00,*//g;s/,$//g" | wc -c )
        if [[ $count_fields -eq 45 && $cnt_flds1 -eq 15 && $cnt_flds2 -eq 15 && $cnt_flds3 -eq 15 ]]
        then
                echo $line >> $outFile
        fi
done
if [[ ! -s $outFile ]]
then
        echo "No output file is created!!! Check your input file"
        exit 126
fi
while [[ $COUNT -le $TOTAL_FILEDS ]]
do
        cut -d',' -f$COUNT $outFile | grep -v 00 > $tmpFile1
        cut -d',' -f$COUNT $outFile | grep -v 00 | sort > $tmpFile2
        diff $tmpFile1 $tmpFile2 > /dev/null
        if [[ $? -eq 1 || ! -s $tmpFile1 ]]
        then
                echo "Check the $COUNT field of the INPUT FILE"
                exit 256
        fi
        COUNT=$((COUNT+1))
done
echo "Success.... Check the output in $outFile"
rm -f $tmpFile1 $tmpFile2

Input file

Code:
00,11,21,00,00,55,00,73,83,07,00,22,39,43,00,66,00,00,00,15,00,00,44,58,67,00,87
02,14,24,30,00,00,00,70,00,00,00,00,32,47,50,60,74,00,04,16,27,38,00,00,00,00,89
00,00,00,00,42,52,61,71,86,01,00,29,33,00,59,00,75,00,03,19,00,00,45,00,68,00,88
00,13,20,31,00,00,64,76,00,05,00,00,35,41,56,00,00,81,00,00,28,00,00,57,65,79,90
06,10,00,36,40,00,00,00,80,00,12,25,00,00,51,62,72,00,09,00,00,37,49,00,69,00,84
00,17,23,00,46,53,00,77,00,08,00,00,34,00,54,00,78,82,00,18,26,00,48,00,63,00,85
00,14,23,39,00,00,60,00,87,02,00,28,00,41,50,00,75,00,03,15,00,00,44,00,68,00,90
00,16,25,35,00,53,00,71,00,08,00,00,36,40,00,62,00,88,00,00,27,37,00,58,64,78,00
05,10,00,00,48,52,00,73,00,00,00,24,31,00,57,66,00,81,07,17,00,00,49,00,00,79,85
00,00,20,33,00,00,63,70,80,06,12,00,34,42,56,00,00,00,00,00,29,00,00,59,69,74,86
04,13,00,32,43,00,65,00,00,00,18,22,00,00,55,00,72,84,09,00,00,38,47,00,67,00,89
01,11,21,00,00,51,00,76,00,00,00,26,30,45,54,00,00,82,00,19,00,00,46,00,61,77,83
06,11,22,00,00,00,64,00,81,00,00,00,30,40,56,00,79,85,08,15,27,35,00,59,00,00,00

# 20  
Old 08-13-2007
MySQL

lorcan,
thanks for the input.

when i ran the script it is telling

./testingscript testingdata
Check the 1 field of the INPUT FILE

it is not incrementing the COUNT value so it is printing only a single record at a time.

You mentioned ---
This script checks for the 15 tickets in a row and also checks if there are 5 tickets within every 9 columns.

And as a whole i am checking whether there are atleast one ticket in a column and arranged in ascending order.

The first one you mentioned is perfectly fine.

the second line is somewhat like this--
00,11,21,00,00,55,00,73,83,07,00,22,39,43,00,66,00,00,00,15,00,00,44,58,67,00,87

this is one data in a file,it consists of 3 rows and 9 columns.we can break
00,11,21,00,00,55,00,73,83
07,00,22,39,43,00,66,00,00
00,15,00,00,44,58,67,00,87

We need to check in this that each column should have min 1 value and if more than that then it should be in ascending order not as a whole.

Thanks for your kind help.

Last edited by namishtiwari; 08-13-2007 at 10:21 AM..
# 21  
Old 08-14-2007
CPU & Memory

lorcan,
did you get it?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Parsing xml - tricky one...need help!!

Hi, i am new to linux programming fraternity but looks like starting with a big thing... yes..xml parsing (it is indeed tough for a beginner like me) so need your kind help... The snippet of xml looks like: <snapshot> <tag1> <key>1234</key> <keytype>abcd</keytype> </tag1> <tag2>... (11 Replies)
Discussion started by: rookie2014
11 Replies

2. Shell Programming and Scripting

Tricky sed required

Hi All I need to put some sed together for a task and its a bit advanced for me, so I thought I'd ask if anyone here could help. I have a csv file with content like this - "","abcde","","" "'","abcde","","" "","","","1234" "'e'","","","" I need to remove any single quotes that fall... (17 Replies)
Discussion started by: steadyonabix
17 Replies

3. Solaris

Tricky egrep

Hi folks! My first post here. I'm working on a script that retrieves a range of files from a list depending on a range of time. UPDATE: I've seen it could be difficult to read all this thing, so I'll make a summarize it.. How come I do this and take a result.. grep "..\:.." lista.new |... (4 Replies)
Discussion started by: kl0x
4 Replies

4. Shell Programming and Scripting

Tricky data manipulation...

Hi everyone.. I am new here, hello.. I hope this doesn't come across to you folks as a stupid question, I'm somewhat new to scripting :) I'm seeking some help in finding a way to manipulate data output for every two characters - example: numbers.lst contains the following output:... (3 Replies)
Discussion started by: explicit
3 Replies

5. Shell Programming and Scripting

Tricky - Need help on Shell script variables

Hi, I have a requirement in which i have to read a csv file and put data in certain set of variables: File content: VP-DTL-REC-CNT, ,854840,0.00,VP-PAID-AMT, ,0,32280885.17,VP-PAT-PAID-AMT, ,0,9930244.32,VP-PAID-REV-CNT, ,484927,0.00,VP-REJ-CNT, ,369913,0.00, , ,0,0.00, , ,0,0.00, , ,0,0.00, ,... (3 Replies)
Discussion started by: shantoshkumar
3 Replies

6. Shell Programming and Scripting

Linux: Writing a tricky script to check connectivity

So, first and foremost, I'm having issues with my internet connection. Periodically, the connection drops across the network. The fix is simple enough: restart the modem. However, this gets old when the connection dies out every hour. I can hit my surfboard on 192.168.100.1, and navigate to a... (5 Replies)
Discussion started by: kungfujoe
5 Replies

7. UNIX for Dummies Questions & Answers

Tricky Quotation Question

Hi, I am at a point in my script where I defined the number of the command line parameter I would like to set a variable equal to: parameter_number=14 I would then like to set a variable equal to the correct parameter: variable=$parameter_number The issue here is that {} is required... (2 Replies)
Discussion started by: msb65
2 Replies

8. Shell Programming and Scripting

Tricky script question

Hi, I'm in the midst of writing a UNIX script that sftp's files to an external host and am stuck with a problem. The problem is that the files created on my server as a order number that correlates to a sequence of directories on the remote host which is where the file should be ftp'ed. ... (3 Replies)
Discussion started by: budrito
3 Replies

9. Shell Programming and Scripting

Tricky Sed

Hello. I am trying to convert occurrences of 'NULL' from a datafile. The 'NULL' occurences appears at this: |NULL| NULL|NULL| NULL|NULL| NULL|NULL| NULL| There should be 52 fields per line. I would like any occurrence of | NULL| or |NULL| to appear as '||' Currently I am using this sed... (2 Replies)
Discussion started by: bestbuyernc
2 Replies

10. Windows & DOS: Issues & Discussions

Tricky one...

Here's my problem: I have a laptop running Windows XP Pro with no internal CD or Floppy drives. I want to install Linux on it. I don't care about the Windows XP Pro installation, in fact I would like to install Linux over the entirety of the HD. However I cannot boot from any external CD drive... (1 Reply)
Discussion started by: saabir
1 Replies
Login or Register to Ask a Question