作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果字段分隔符为空字符串,则每个字符成为一个单独的字段
$ echo hello | awk -F '' -v OFS=, '{$1 = NF OFS $1} 1'
5,h,e,l,l,o
$ echo hello | awk -F ' *' -v OFS=, '{$1 = NF OFS $1} 1'
1,hello
FS=""
只是特例?
FS=" *"
喜欢
FS=" +"
最佳答案
有趣的问题!
我刚刚提取了 gnu-awk 4.1.0 的代码,我想我们可以在文件 field.c
中找到答案。 .
line 371:
* re_parse_field --- parse fields using a regexp.
*
* This is called both from get_field() and from do_split()
* via (*parse_field)(). This variation is for when FS is a regular
* expression -- either user-defined or because RS=="" and FS==" "
*/
static long
re_parse_field(lo...
line 425
):
if (REEND(rp, scan) == RESTART(rp, scan)) { /* null match */
<space>*
的情况匹配你的问题。实现没有增加
nf
,也就是说,它认为整行是一个字段。注意这个函数在
do_split()
中使用过功能也。
FS
为空字符串,gawk 将每个字符分隔到自己的字段中。 gawk 的 doc 清楚地写了这个,也在代码中,我们可以看到:
line 613:
* null_parse_field --- each character is a separate field
*
* This is called both from get_field() and from do_split()
* via (*parse_field)(). This variation is for when FS is the null string.
*/
static long
null_parse_field(long up_to,
FS
具有单个字符,awk 不会将其视为正则表达式。文档中也提到了这一点。同样在代码中:
#line 667
* sc_parse_field --- single character field separator
*
* This is called both from get_field() and from do_split()
* via (*parse_field)(). This variation is for when FS is a single character
* other than space.
*/
static long
sc_parse_field(l
re_parse_field()
, 和
sc_parse_field()
,我们看到
do_split
也会调用它们。它解释了为什么我们有
1
在以下命令中而不是
3
:
kent$ echo "foo"|awk '{split($0,a,/ */);print length(a)}'
1
关于awk - gawk FS 将记录拆分为单个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22044272/
我是一名优秀的程序员,十分优秀!