sparrow
sparrow

Reputation: 460

How to use awk script to generate a file

I have a very large compressed file(dataFile.gz) that I want to generate another file using cat and awk. So using cat to view the contents and then piping it to awk to generate the new file. The contents of compressed as like below

Time,SequenceNumber,MsgType,MsgLength,CityOrign,RTime
7:20:13,1,A,34,Tokyo,0
7:20:13,2,C,35,Nairobi,7:20:14
7:20:14,3,E,30,Berlin,7:20:15
7:20:16,4,A,34,Berlin,7:20:17
7:20:17,5,C,35,Denver,0
7:20:17,6,D,33,Helsinki,7:20:18
7:20:18,7,F,37,Tokyo,0
….
….
….

For the new file, I want to generate, I only want the Time, MsgType and RTime. Meaning columns 0,2 and 5. And for column 5, if the value is 0, replace it with the value at column 0. i.e replace RTime with Time

Time,MsgType,RTime
7:20:13,A,7:20:13
7:20:13,C,7:20:14
7:20:14,E,7:20:15
7:20:16,A,7:20:17
7:20:17,C,7:20:17
7:20:17,D,7:20:18
7:20:18,F,7:20:18

This is my script so far:

#!/usr/bin/awk -f 

BEGIN {FS=","

    print %0,%2,

    if ($5 == "0") {
        print $0
    } else {
        print $5
    }
}

My question is, will this script work and how do I call it. Can I call it on the terminal like below?

zcat dataFile.gz | <awk script> > generatedFile.csv

Upvotes: 1

Views: 116

Answers (2)

RavinderSingh13
RavinderSingh13

Reputation: 133528

Could you please try following. A bit shorter version of @anubhava sir's solution. This one is NOT having assignment to 6th field it only checks if that is zero or not and accordingly it prints the values.

awk 'BEGIN{FS=OFS=","} {print $1, $3, $6==0?$1:$6}' Input_file

Upvotes: 1

anubhava
anubhava

Reputation: 785246

awk index starts with 1 and $0 represents full record. So column numbers would be 1, 3, 6.

You may use this awk:

awk 'BEGIN{FS=OFS=","} !$6{$6=$1} {print $1, $3, $6}' file

Time,MsgType,RTime
7:20:13,A,7:20:13
7:20:13,C,7:20:14
7:20:14,E,7:20:15
7:20:16,A,7:20:17
7:20:17,C,7:20:17
7:20:17,D,7:20:18
7:20:18,F,7:20:18

Upvotes: 1

Related Questions