gpt4 book ai didi

linux - awk 命令问题以识别定界符

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:37 24 4
gpt4 key购买 nike

专家,为什么定界符在我的情况下不起作用? '^A' 是一个真正的 '^A' 字符串,而不是 ASCII 值 1。

cat 2.txt
123^A9343784^A2207983400
45^A1270843^A66789439
67^A188285^A28075164
8^A91183^A27049564
9^A128589^A7283486
100^A84325^A7043462

cat 2.txt | awk -F'^A' '{print $1 }'
123^A9343784^A2207983400
45^A1270843^A66789439
67^A188285^A28075164
8^A91183^A27049564
9^A128589^A7283486
100^A84325^A7043462

顺便说一句,在 Mac OSX/Linux 上工作。

提前致谢,林

最佳答案

编辑

Ed Morton 在评论区提出一些有效观点后,我更新了我的答案,以提供更多关于 awk 变体在转义方面的不同行为的见解。


我的理解是你想使用 ^A 作为分隔符。

您必须转义 ^ 字符,因为它与 awk 的正则表达式* 混淆。这样做的方法是在 ^

前面加上双转义序列 \\

-Linux 中(awk 通常是 symlinkedmawkgawk,见注意):

$ cat 2.txt | awk -F'\\^A' '{print $1 }' # mawk, gawk

现在,mawk 对此有稍微宽松的行为,因此可以仅使用 \(单转义)获得相同的结果:

$ cat 2.txt | awk -F'\^A' '{print $1 }' # mawk (note the single backslash here)

但是,一般来说,应该避免(尤其是在脚本中使用或作为passe partout one-liner -portability 出现在脑海中时),因为其他 awk 变体会以不同的方式处理这个问题,并且会发生各种不想要的结果(有些甚至在复杂情况下伪装成合法结果)


- Windows(cygwinMinGWgnutils 提供傻眼):

$ cat 2.txt | awk -F'\\^A' '{print $1 }' # gawk

-OSX 中(awk 默认为 nawk):

$ cat 2.txt | awk -F'\\^A' '{print $1 }' # nawk

所有这些产量:

123
45
67
8
9
100

*您可以找到有关 awk 正则表达式的更多信息 here .


注意

为了找到您的系统中可用的 awk 变体,首先您必须找到 awk 命令本身,然后使用 ls 跟踪链接链直到实际的二进制文件,如下所示:

$ which awk
/usr/bin/awk
$ ls -l /usr/bin/awk
lrwxrwxrwx 1 root root ... /usr/bin/awk -> /etc/alternatives/awk
$ ls -l /etc/alternatives/awk
lrwxrwxrwx 1 root root ... /etc/alternatives/awk -> /usr/bin/mawk

(示例取 self 的系统,Xubuntu 14.04)

关于linux - awk 命令问题以识别定界符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32917662/

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