按照字段分隔符将一行拆分为字符串

5

我有一个如下的文件:

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可能是更好的选择。 - potong
我想在这里探索awk的行为..我知道可以使用其他工具如sed和perl来完成这个任务。 - Vijay
1个回答

4

事实上,Solaris的awk只考虑单个字符。我认为这可能是由于传统原因,也正是为什么会同时提供nawk的原因。

-F开关非常特殊:它只取您引用字符串的第一个字符,并丢弃其余部分,因此t保留下来了---它代表“查找制表符作为字段分隔符”。


那么如果是这种情况,为什么它不将t视为字段分隔符,并在第一行将emp3打印为$NF呢? - Vijay
1
@ShiDoiSi:$NF 表示该行中最后一个字段的内容。您是正确的,AWK 不使用美元符号作为变量,而是用它们表示字段编号。NF 是包含最后一个字段编号的变量。 - Dennis Williamson
@DennisWilliamson 对,我没有仔细关注他的预期输出,我以为他想要打印字段的数量。 - Volker Stolz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接