如何避免在 Unix 命令中转义分隔符?

Ran*_*jan 6 awk text-processing

我需要取以波浪号 (~) 分隔的字段的总和。我的问题是我的数据也有分隔符转义。

例子

1~CEO~ashok\~kumar~1000
Run Code Online (Sandbox Code Playgroud)

正如我们在上面的第三个字段中看到的,我们已经转义了我想避免的分隔符。我正在运行以下不处理此问题的命令。

$ cat test.out|awk -F'~' 'BEGIN {sum=0} {sum+=$4} END{print sum}'
Run Code Online (Sandbox Code Playgroud)

假设test.out数据为:

1~CEO~ashok\~kumar~1000
2~CFO~Ranjan~2000
3~CEO~kumar~1000
Run Code Online (Sandbox Code Playgroud)

所以我的输出应该是 4000。但目前我的命令只有 3000!

Joh*_*024 1

只需在处理之前将转义分隔符更改为其他内容即可awk。这可以通过以下方式完成sed

$ cat test.out| sed 's/\\~/=/g' | \
    awk -F'~' 'BEGIN {sum=0} {sum+=$4} END{print sum}'
4000
Run Code Online (Sandbox Code Playgroud)

而且,正如通常的情况一样,cat不需要:

$ sed 's/\\~/=/g' test.out | awk -F'~' 'BEGIN {sum=0} {sum+=$4} END{print sum}'
Run Code Online (Sandbox Code Playgroud)