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

如何将AWK处理结果存入变量后通过system()调用写入目标文件

错误原因

  • awk中访问自定义变量不需要加$前缀,$是用于提取指定序号字段的专用运算符。你代码中的$myvar等价于提取第myvar个字段,初始myvar为空时默认等价于$0(当前处理行的完整内容),所以print > $myvar会直接把当前行内容作为文件名写入,自然就生成了一堆名为anything1();、anything2();的文件。
  • awk内部变量和shell变量是互相独立的,你直接在system()的参数字符串里写$myvar,读取的是shell环境的变量,根本拿不到awk内部的myvar值,而且touch命令仅用于创建空文件/修改文件时间戳,没有写入内容的功能。

正确实现方案

你可以在处理1.txt的过程中把所有处理后的行拼接存入awk变量,等全部处理完成后在END块中一次性调用system写入目标文件,参考代码如下:

awk \
'BEGIN { myvar = "" }
FNR==1 { ++f }
f==1 { a[i++] = $0 }
f==2 {
    if ($0 ~ /house/) {
        gsub(/house/, a[int(j++/2)%2])
    }
    # 拼接处理后的行到myvar,保留换行符
    myvar = myvar $0 "\n"
}
END {
    # \047是单引号的ASCII转义,避免内容里的特殊字符破坏shell命令结构
    cmd = "printf \047%s\047 " myvar " > a.txt"
    system(cmd)
}' \
0.txt 1.txt

执行后生成的a.txt内容和你最初正确版本的输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:06:02