How can we use '~|~' delimiter to split the records using scripting command?

Viewed 71

Please suggest how can I split the columns separated with ~|~ delimiter.(file: abc.dat)

a~|~1~|~x
b~|~1~|~y
c~|~2~|~z

I am trying below awk command but getting output 0 count.

awk -F'~|~' '$2 == 1' ${file} | wc -l
2 Answers

With your shown samples, please try following. We need not to use wc command along with awk, it could be done within awk itself.

awk -F'~\\|~' '$2 == 1{count++} END{print count}' "$file"

Explanation: Setting field separator as ~|~(escaped | here). Then checking if 2nd field is 1, increment variable count with 1 then. In END block of this program print its value.

For saving values into shell variable use like:

var=$(awk -F'~\\|~' '$2 == 1{count++} END{print count}' "$file")

You can also use ~[|]~ as FS value, as the pipe char used inside a bracket expression always matches itself, a pipe char:

counter=$(awk 'BEGIN{FS="~[|]~"} $2==1{cnt++} END{print cnt}' file)

See the online awk demo:

s='a~|~1~|~x
b~|~1~|~y
c~|~2~|~z'
counter=$(awk 'BEGIN{FS="~[|]~"} $2==1{cnt++} END{print cnt}' <<< "$s")
echo $counter
# => 2
Related