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

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

请建议如何拆分用 ~|~ 分隔符分隔的列。(文件:abc.dat)

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

我在 awk 命令下尝试,但输出计数为 0。

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

使用您展示的示例,请尝试执行以下操作。我们不需要将 wc 命令与 awk 一起使用,它可以在 awk 本身内完成。

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

解释:设置字段分隔符为~|~(此处转义|)。然后检查第二个字段是否为 1,然后将变量计数加 1。在这个程序的 END 块中打印它的值。

要将值保存到 shell 变量中,请使用:

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

您也可以使用 ~[|]~ 作为 FS 值,因为在括号表达式中使用的管道字符总是匹配自身,管道字符:

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

online awk demo

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