使用竖线字符作为字段分隔符

H-H*_*H-H 0 awk gawk

我正在尝试不同的命令来处理 csv 文件,其中分隔符是管道|字符。

虽然这些命令在逗号是分隔符时确实有效,但当我用管道替换它时会引发错误:

awk -F[|] "NR==FNR{a[$2]=$0;next}$2 in a{ print a[$2] [|] $4 [|] $5 }" OFS=[|] file1.csv file2.csv

awk "{print NR "|" $0}" file1.csv
Run Code Online (Sandbox Code Playgroud)

我试过了,"|"[|]/|无济于事。

我在 Windows 上使用 Gawk。我错过了什么?

fed*_*qui 5

你试过了"|"[|]而且/|/|不起作用,因为转义字符是\,而[]用于定义一系列字段,例如,[,-]如果您想FS成为,-

为了让它工作"|"很好,你确定你是这样使用的吗?或者,转义它 --> \|

$ echo "he|llo|how are|you" | awk -F"|" '{print $1}'
he
$ echo "he|llo|how are|you" | awk -F\| '{print $1}'
he
$ echo "he|llo|how are|you" | awk 'BEGIN{FS="|"} {print $1}'
he
Run Code Online (Sandbox Code Playgroud)

但是请注意,当您说:

print a[$2] [|] $4 [|] $5
Run Code Online (Sandbox Code Playgroud)

所以你根本没有使用任何分隔符。正如您已经定义的那样OFS,请执行以下操作:

print a[$2], $4, $5
Run Code Online (Sandbox Code Playgroud)

例子:

$ cat a
he|llo|how are|you
$ awk 'BEGIN {FS=OFS="|"} {print $1, $3}' a
he|how are
Run Code Online (Sandbox Code Playgroud)