Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Split string on a backslash ("\") delimiter in awk?

Tags:

regex

unix

awk

I am trying to split the string in a file based on some delimiter.But I am not able to achieve it correctly... Here is my code below.

awk 'var=split($2,arr,'\'); {print $var}' file1.dat

Here is my sample data guys.

Col1 Col2
abc  123\abc
abcd 123\abcd

Desire output:

Col1 Col2
abc  abc
abcd abcd
like image 599
Teja Avatar asked Nov 20 '25 03:11

Teja


2 Answers

You don't need to call split. Just use \\ as field separator:

echo 'a\b\c\d' | awk -F\\ '{printf("%s,%s,%s,%s\n", $1, $2, $3, $4)}'

OUTPUT:

a,b,c,d
like image 56
anubhava Avatar answered Nov 21 '25 17:11

anubhava


Sample data and output is my best guess at your requirement

 echo '1:2\\a\\b:3' | awk -F: '{ 
     n=split($2,arr,"\\")
     # print "#dbg:n=" n
     var=arr[3]
     print var
     }'

output

b

Recall that split returns the number of fields that it found to split. You can uncomment the debug line and you'll see the value 3 returned.

Note also that for my test, I had to use 2 '\' chars for 1 to be processed. I don't think you'll need that in a file, but if this doesn't work with a file, then try adding extra '\' as needed to your data. I tried several variations on how to use '\', and this seems the most straightforward. Others are welcome to comment!

I hope this helps.

like image 29
shellter Avatar answered Nov 21 '25 17:11

shellter



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!