gpt4 book ai didi

bash - 管道符号 |在 AWK 字段分隔符中

转载 作者:行者123 更新时间:2023-11-29 08:56:02 24 4
gpt4 key购买 nike

我有一个包含以下数据的文件 foo:

A<|>B<|>C<|>D
1<|>2<|>3<|>4

我想使用 awk 正确访问每一列,但它没有正确解释字段分隔符。

当我运行时:

head foo | \
awk 'BEGIN {FS="<|>"} {out=""; for(i=1;i<=NF;i++){out=out" "$i}; print out}'

代替打印

A B C D
1 2 3 4

它打印

A | B | C | D 
1 | 2 | 3 | 4

这背后的原因是什么?

最佳答案

管道是正则表达式中的特殊字符,因此您需要使用反斜杠对其进行转义。但是这个反斜杠也是字符串字面量的特殊字符,所以需要再次转义。所以你最终得到以下结果:

awk -F '<\\|>' '{$1=$1}1'

awk 'BEGIN {FS="<\\|>"} {$1=$1}1'

此语法的原因在这里得到了很好的解释:http://www.gnu.org/software/gawk/manual/gawk.html#Computed-Regexps .简而言之,表达式被解析了两次。

关于bash - 管道符号 |在 AWK 字段分隔符中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34801373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com