【问题标题】:single space as field separator with awk单个空格作为 awk 的字段分隔符
【发布时间】:2016-03-15 10:15:53
【问题描述】:

我正在处理一个字段由单个空格分隔的文件。

awk 将 FS " " 解释为“一个或多个空格”,当其中一个字段为空时,它会误读我的文件。

我尝试使用“一个空格后跟一个空格”(" (?! )")作为 FS,但 awk 不支持负前瞻。像“单空格字段分隔符 awk”这样的简单 google 查询仅将我发送到解释 FS=" " 特殊处理的手册页。我一定错过了相关的手册页...

如何在 awk 中使用单个空格作为字段分隔符?

【问题讨论】:

  • 我其实已经打开了相关的手册页...gnu.org/software/gawk/manual/html_node/…
  • FS can be set to "[ ]" to use a single space as field separator.
  • awk -F'[ ]' '{printf ">%s<",$2}' <<< 'a b' 对我不起作用,我正在使用 gawk
  • 呃,看来推荐系统会忽略换行符。我实际上使用<<< 'a[space][space][space][space]b' 作为输入
  • 我的意思是“啜饮空白”。

标签: awk gawk


【解决方案1】:

这应该可以工作

$ echo 'a    b' | awk -F'[ ]' '{print NF}'
5

其中,这会将所有连续的空白视为一个。

$ echo 'a    b' | awk -F' ' '{print NF}'
2

根据评论,需要特别考虑,空字符串或空格作为字段值是非常不同的东西,可能不适合空格分隔的内容。

我建议使用 cut 进行预处理并更改分隔符,例如

$ echo 'a    b' | cut -d' ' -f1,3,5 --output-delimiter=,
a,,b

【讨论】:

  • 听起来 OP 想要 3 而不是 5 因为分隔符包围的两个空格是一个字段 - 一个包含两个空格的字段。
  • @hek2mgl 呃,不,字段无法包含字段分隔符。当字段分隔符为单个空格时,相邻的两个空格是围绕一个空字段的分隔符。
  • @tripleee 是的。我仍然认为这个问题很有趣,我的意思是它通常是一个有效的用例,但是在这种情况下我会选择不同的分隔符。
  • @karafka 更改分隔符的好主意,但我的字段中没有任何空格,所以第一个解决方案就足够了。谢谢!
猜你喜欢
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 2017-10-23
  • 1970-01-01
  • 2014-10-14
  • 2011-02-06
相关资源
最近更新 更多