专家,为什么分隔符不适用于我的情况? '^ 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
BTW,在Mac OSX / Linux上工作。
提前谢谢, 林答案 0 :(得分:3)
编辑
在 Ed Morton 在评论区域中提出一些有效点之后,我更新了我的答案,以便对awk变种有关转义的不同行为提供更多见解。
我的理解是你想使用^A
作为分隔符。
你必须逃避^
角色,因为它与awk的正则表达式混淆*。
执行此操作的方法是将双转义序列\\
添加到^
- 在 Linux 中(awk
通常是symlinked到mawk
或gawk
,请参阅注意):
$ 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 - 可持续性出现在脑海中),因为其他 awk 变种会以不同的方式对待它,并且会发生各种不需要的结果(有些甚至在复杂情况下被伪装成合法的结果)
- 在 Windows ( cygwin , MinGW , gnutils 提供{{ 1}}):
gawk
- 在 OSX 中($ cat 2.txt | awk -F'\\^A' '{print $1 }' # gawk
默认为awk
):
nawk
所有这些产量:
$ cat 2.txt | awk -F'\\^A' '{print $1 }' # nawk
* 您可以找到有关awk正则表达式的更多信息 here。
注意
首先,要查找系统中可用的123
45
67
8
9
100
变体
你必须找到awk命令本身,然后使用awk
跟随链接到实际的二进制文件,如下所示:
ls
(取自我的系统示例,Xubuntu 14.04)