Home > other >  AWK variables and functions syntax
AWK variables and functions syntax

Time:06-07

I would like to remove "_" and ":" in the texts and then convert the texts into lowercase in AWK but couldn't get it working. Here's a simple data.txt file:

Count_Part:AA,1,2,3,4,5
Name_Date:BB,4,5,6,7,8

and my script process.awk:

BEGIN{
  FS=",";
}
{
        print("raw -->", $1);
        replaced=$gsub(/_|:/, "", $1);
        print("replacement -->", $replaced);
        lowered=$tolower($replaced);
        print("to lowercase -->", $lowered);
        print("\n");
}

but what I get from cat data.txt | awk -f process.awk is this, which is not what I expected:

raw --> Count_Part:AA
replacement --> CountPartAA
to lowercase --> CountPartAA 1 2 3 4 5


raw --> Name_Date:BB
replacement --> 6
to lowercase -->

I am wondering 1) why the CountPartAA is not printed as countpartaa, and 2) why the 2nd row of the data.txt did not have the similar output as the 1st row did.

I suspect it's due to the variable assignment and function return syntax but I could not make it work. My expected output is like this:

raw --> Count_Part:AA
replacement --> CountPartAA
to lowercase --> countpartaa


raw --> Name_Date:BB
replacement --> NameDateBB
to lowercase --> namedatebb

Please kindly help. Thanks!

CodePudding user response:

You are close, need to remove sigills $ on functions and variables apart $1 :

BEGIN{
  FS=",";
}
{
        print("raw -->", $1);
        gsub(/_|:/, "", $1);     # return integer and modify $1 directly 
        replaced=$1
        print("replacement -->", replaced);
        lowered=tolower(replaced);
        print("to lowercase -->", lowered);
        print("\n");
}

output

raw --> Count_Part:AA
replacement --> CountPartAA
to lowercase --> countpartaa


raw --> Name_Date:BB
replacement --> NameDateBB
to lowercase --> namedateb

CodePudding user response:

you mean like this ?

{m,n,g}awk '$!NF=tolower($!(NF=NF))' FS='[_:]' OFS=
 
countpartaa,1,2,3,4,5
namedatebb,4,5,6,7,8
  • Related