nawk question


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting nawk question
# 1  
Old 03-04-2008
nawk question

I am trying to write the following c code in nawk:

while ((ch = getc (fp)) != EOF)
{
total_bytes++;
checksum = (checksum >> 1) + ((checksum & 1) << 15);
checksum += ch;
checksum &= 0xffff; /* Keep it within bounds. */
}

I appreciate your help
# 2  
Old 03-04-2008
My nawk man pages do not have and "&=" or ">> <<" shift left or shift right operators.
nawk apparently does not support that. You can fake >> and << with division by 2 and multiplication by two. I don't know a way to fake the "and" operation without writing
some very tricky code. You are doing 32 bit operations. That means "anding" 32 values.

Try cksum or write your own C code. That makes more sense.

Maybe one of our ultimo awkers have done this solidly, but it looks like a nightmare waiting to happen to me.
# 3  
Old 03-04-2008
Thanks for your prompt response. We will see if someone can help Smilie

Thanks again
# 4  
Old 03-04-2008
yea my problem is how to do the AND.
# 5  
Old 03-04-2008
Here is your problem, why no "&" operator:

really old awk implementations used single precision floating point for numbers.
Newer awks, like nawk, use double precision. None use 32 bit integers.
# 6  
Old 03-04-2008
the most recent 'gawk' supports bitwise ops: and, or, xor, compl, lshift and rshift
here's something found seaching comp.lang.awk:
Code:
function awkand(a,b,  k,r) {
  k = 1
  r = 0
  a = int(a + 0.5) # round to nearest integer
  b = int(b + 0.5)
  while ( a + b ) {
    if ( a%2 && b%2 ) r += k
    a = int(a / 2)
    b = int(b / 2)
    k *= 2
  }
  return r

}

# 7  
Old 03-04-2008
And'ing a number with FFFF is the same as finding the remainder when dividing by 65535. This operation is called modulo and could be implemented as:
$ echo "65536
> 65537
> 65538" | awk 'function mod(v,m) { return v-(int(v/m)*m) }
> { print $1, mod($1,65535) }'
65536 1
65537 2
65538 3
$
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Nawk command not working for Question mark (?)

Hi Folks, I am facing an issue with nawk command. The data is as below: ABC0022,BASC,Scene Package,INR,02May17,XXX4266,be?. Hotel,3,AW01,Twin Room,61272,41308,39590,39590,X,X ABC0022,BASC,Scene Package,INR,02May17,XXX4266,be?. Hotel,3,AW02,Twin Room with Balcony,9272,85638,4520,9590,X,X... (1 Reply)
Discussion started by: kirans.229
1 Replies

2. Shell Programming and Scripting

Nawk Problem - nawk out of space in tostring on

Hi.. i am running nawk scripts on solaris system to get records of file1 not in file2 and find duplicate records in a while with the following scripts -compare nawk 'NR==FNR{a++;next;} !a {print"line"FNR $0}' file1 file2duplicate - nawk '{a++}END{for(i in a){if(a-1)print i,a}}' file1in the middle... (12 Replies)
Discussion started by: Abhiraj Singh
12 Replies

3. Shell Programming and Scripting

Nawk variable question

Hi, I'm trying to replace a string with the contents of a file.. I found the below thread that shows how to do this but is there any way to use a variable as the file name in the nawk command?.. When I try I get an error saying while read groupsvar do ... (5 Replies)
Discussion started by: Jazmania
5 Replies

4. Shell Programming and Scripting

nawk question

Hi guys I am using the following command to "grep" a pattern and 22 lines after it from the file: $ nawk '/\/{c=22}c&&c--' allocations.ini It does the job fine if the pattern is hardcoded into the command, if the case above it is . But when I am trying to assign a variable instead of... (7 Replies)
Discussion started by: aoussenko
7 Replies

5. UNIX for Dummies Questions & Answers

Nawk help!!!

Hi, Please help me I want to filter all messages having a value less than a particular value..Please advice how to use <= in the below red marked script.. Getting the error as no such file or directory for the marked line no. Thanks in advance... Script is as under : read message gawk... (5 Replies)
Discussion started by: vanand420
5 Replies

6. Shell Programming and Scripting

Nawk in a tail - syntax question

Hello. I run the following command to get data from a logfile: nawk 'BEGIN {FS="|"} {if ($6=="sonusSgxConfigurationErrorNotification") print ":" $10 ":" $11}' sonustrap.log | nawk 'BEGIN {FS=":"} {print $3 $5}' This command is 'static' from the .log file, however I wanted tail -f this and... (3 Replies)
Discussion started by: lennys26
3 Replies

7. Shell Programming and Scripting

Nesting - two nawk into one nawk

hi people; this is my two awk code: nawk '/cell+-/{r=(NF==8) ? $4FS$5FS$6 : NF==7 ? $4FS$5 : $4 ;c=split(r,rr);for (i=1;i<=c;i++){if(rr != "111111"){printf($3" %d ""\n",(i+3))}}printf("")}' /home/gc_sw/str.txt > /home/gc_sw/predwn.txt nawk -F'*' '{gsub(/ *$/,"")}$0=$1$($NF-2)'... (2 Replies)
Discussion started by: gc_sw
2 Replies

8. Shell Programming and Scripting

awk/nawk question to format a file

Hi, I am new to awk/nawk, needs help. I want to merge the rows having emplid attribute same into a single row in the following file. In actual this kind of file will have around 50k rows. Here is my input file id|emplid|firstname|dep|lastname 1|001234|test|1001|1 2|002345|test|1032|2... (7 Replies)
Discussion started by: kumar04
7 Replies

9. Shell Programming and Scripting

how to access values of awk/nawk variables outside the awk/nawk block?

i'm new to shell scripting and have a problem please help me in the script i have a nawk block which has a variable count nawk{ . . . count=count+1 print count } now i want to access the value of the count variable outside the awk block,like.. s=`expr count / m` (m is... (5 Replies)
Discussion started by: saniya
5 Replies

10. Shell Programming and Scripting

NAWK question

Hello everybody !! I just started messing around with NAWK/AWK and I find it very interesting. I was trying to have script that prints only the the different lines (lines that are identical and adjacent, some that are identical and not adjacent, and some that are just different) I tried... (6 Replies)
Discussion started by: DeltaX
6 Replies
Login or Register to Ask a Question