You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWK中$$1的作用是什么?解析$$1~/^[^0-9]/ {print $$1;}代码疑问

AWK中$$1的含义与代码片段解析

一、$$1的核心含义

在AWK中:

  • $n表示当前行的第n个字段(比如$1是第一个字段,$2是第二个字段)。
  • $$1是间接字段引用:先获取当前行第一个字段的值,把这个值当作字段编号,再取出对应编号的字段。举个例子:如果当前行$1的值是3,那$$1就等价于$3;如果$1是"abc"这种非数字,AWK会将其视为无效字段编号,返回空或者直接取$0(整行内容),具体取决于AWK版本。

二、代码片段$$1~/^[^0-9]/ {print $$1;}的功能

这段代码的逻辑是:

  1. 对每一行,通过$$1间接获取目标字段;
  2. 判断该目标字段的开头是否不是数字(正则^[^0-9]的含义:^匹配行首,[^0-9]匹配非数字字符);
  3. 如果满足条件,就打印这个目标字段。

三、结合你的测试输入分析

你的测试输入如下:

std
1 ABC1724 2018 Wroclaw
3 ABC1724 2018 Wroclaw
2 ABC1724 2018 Wroclaw

逐行解析执行逻辑:

  • 第一行std:$1的值是"std",AWK无法将其解析为有效字段编号,此时$$1等价于$0(整行内容std)。std开头是非数字,满足条件,会打印std。
  • 第二行1 ABC1724 2018 Wroclaw:$1的值是"1",$$1等价于$1(即"1")。1开头是数字,不满足条件,不打印。
  • 第三行3 ABC1724 2018 Wroclaw:$1的值是"3",$$1等价于$3(即"2018")。2018开头是数字,不满足条件,不打印。
  • 第四行2 ABC1724 2018 Wroclaw:$1的值是"2",$$1等价于$2(即"ABC1724")。ABC1724开头是非数字,满足条件,会打印ABC1724。

四、测试时可能遇到的问题

如果测试后没看到预期输出,大概率是shell转义问题:在shell中,$$是特殊变量,表示当前shell的进程ID。如果直接运行awk $$1~/^[^0-9]/ {print $$1;},shell会先把$$替换成进程ID,导致AWK实际执行的代码完全偏离预期。

正确的运行方式是用单引号包裹AWK脚本,避免shell解析特殊变量:

awk '$$1~/^[^0-9]/ {print $$1;}' 你的输入文件

内容的提问来源于stack exchange,提问作者POWER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:55:20