【问题标题】:splitting a line according to the field separator as a string根据字段分隔符将行拆分为字符串
【发布时间】:2012-08-09 17:17:43
【问题描述】:

我有一个文件如下:

10temp3
20/temp4
28 temp 5

我正在使用以下命令来拆分行并获取行中的最后一个数字。

awk -F"temp" '{print $NF}' temp3

我得到的输出是:

> awk -F"temp" '{print $NF}' temp3
10temp3
20/temp4
28 temp 5

令人惊讶的是,如果我使用 nawk,我得到了预期的输出。

> nawk -F"temp" '{print $NF}' temp3
3
4
 5
> 

我可以知道原因吗? awk 不支持作为分隔符提到的字符串吗?

【问题讨论】:

  • 如果行中的最后一个数字是您想要的全部,sed 's/.*temp *//' file 可能是更好的选择。
  • 我想在这里探索一下 awk 的行为。我知道这可以通过使用 sed 和 perl 等其他工具来完成。

标签: unix awk solaris


【解决方案1】:

确实 Solaris awk 只考虑单个字符。我会说这可能是由于传统,也正是 nawk 被运送的原因。

-F 开关真的很特别:它获取引用字符串的第一个字符,并丢弃其余字符,所以 t 仍然存在 --- 代表“查找 tab作为字段分隔符”。

【讨论】:

  • 那么如果是这样,为什么不考虑至少 t 作为字段分隔符并将 emp3 作为第一行的 $NF 打印?
  • @ShiDoiSi: $NF 表示该行最后一个字段的内容。您是正确的,AWK 不使用美元符号作为变量,它使用它们作为字段编号。 NF 是包含最后一个字段编号的变量。
  • @DennisWilliamson 是的,我没有密切关注他的预期输出,我以为他想打印字段数。
猜你喜欢
  • 2019-09-19
  • 2022-01-04
  • 2011-08-04
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多