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

关于双美元符号($$)的含义及awk代码$$1~/^[^0-9]/ {print $$1;}的功能咨询

关于Awk中双美元符号($$)的含义与指定代码解析

咱们分两部分来拆解你的问题,先搞懂双美元符号的作用,再一步步分析那段Awk代码的逻辑~

一、双美元符号($$)在Awk中的含义

首先要区分场景:在普通Shell脚本里,$$代表当前Shell进程的ID,但在Awk脚本中,它是间接引用字段的特殊语法:

  • 平时我们用$n(比如$1、$2),是直接调用第n个字段的内容;
  • 而$$var则是先获取变量var的值,把这个值当作字段编号,再取出对应编号的字段。举个例子:如果当前行的$1(第一个字段)的值是"3",那$$1就等价于$3,也就是第三个字段的内容;如果$1是字符串"foo",Awk会尝试把它转成数字,结果是0,此时$$1就等价于$0(整行内容)。

二、这段Awk代码的工作原理

先把代码明确出来:

$$1~/^[^0-9]/ {print $$1;}

我们拆成几个部分理解:

1. 核心条件:$$1~/^[^0-9]/

这部分是Awk的条件判断,拆解来看:

  • $$1:如前面所说,是间接引用字段——先取当前行第一个字段的值作为字段号,再获取对应字段的内容;
  • ~/^[^0-9]/:这是正则表达式匹配,意思是判断目标内容是否以非数字字符开头:
    • ^表示字符串的起始位置;
    • [^0-9]表示任意非0-9的字符(比如字母、符号、空格等)。

2. 完整执行逻辑

对每一行输入内容,Awk会按以下步骤处理:

  1. 提取当前行的第一个字段$1,用它的值作为字段编号,取出对应的字段内容(也就是$$1);
  2. 检查$$1的内容是否以非数字开头;
  3. 如果满足条件(开头是非数字),就打印出$$1的内容。

举个实际例子验证

假设我们有以下输入内容:

2 123 apple
name alice bob
5 456 cherry

逐行执行的结果是:

  • 第一行:$1是"2",$$1是$2即"123",开头是数字,不满足条件,不打印;
  • 第二行:$1是"name",转成数字0,$$1是整行内容name alice bob,开头是字母"n"(非数字),满足条件,打印整行;
  • 第三行:$1是"5",但这一行只有3个字段,$5是空字符串,不满足“以非数字开头”的条件,不打印。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:58:05