如何使用'~|~'分隔符使用脚本命令拆分记录?



请建议如何拆分用~|~分隔符分隔的列。(文件: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

最新更新