请建议如何拆分用~|~分隔符分隔的列。(文件:abc.dat(
a~|~1~|~x
b~|~1~|~y
c~|~2~|~z
我在awk命令下尝试,但得到的输出计数为0。
awk -F'~|~' '$2 == 1' ${file} | wc -l
使用您显示的示例,请尝试以下操作。我们不需要将wc
命令与awk
一起使用,它可以在awk
本身中完成。
awk -F'~\|~' '$2 == 1{count++} END{print count}' "$file"
解释:将字段分隔符设置为~|~
(此处为转义的|
(。然后检查第二个字段是否为1
,然后用1递增变量计数。在该程序的END
块中打印其值。
要将值保存到shell变量中,请使用以下命令:
var=$(awk -F'~\|~' '$2 == 1{count++} END{print count}' "$file")
您也可以使用~[|]~
作为FS
值,因为括号表达式中使用的管道字符总是与其自身匹配,管道字符:
counter=$(awk 'BEGIN{FS="~[|]~"} $2==1{cnt++} END{print cnt}' file)
查看在线awk
演示:
s='a~|~1~|~x
b~|~1~|~y
c~|~2~|~z'
counter=$(awk 'BEGIN{FS="~[|]~"} $2==1{cnt++} END{print cnt}' <<< "$s")
echo $counter
# => 2