我正在尝试不同的命令来处理 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。我错过了什么?
你试过了"|",[|]而且/|。/|不起作用,因为转义字符是\,而[]用于定义一系列字段,例如,[,-]如果您想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)