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

如何统计每行中文字符数量并追加至行尾,使用sed、awk等命令实现

可行实现方案

最优方案(awk内置方法,效率最高)

awk原生内置length()函数,在UTF-8 locale环境下可以直接统计中文字符数量,无需调用外部命令:

  1. 先执行命令预览输出效果,避免改错文件:
# 先设置locale为UTF-8,确保统计的是字符数而非字节数
export LC_ALL=zh_CN.UTF-8
awk '{print $0, length($0)}' myfile
  1. 确认输出符合预期后,直接修改原文件:
    如果使用GNU awk 4.1及以上版本,可直接用内置inplace参数修改原文件:
awk -i inplace '{print $0, length($0)}' myfile

低版本awk可以用临时文件中转实现原文件修改:

awk '{print $0, length($0)}' myfile > tmp_file && mv tmp_file myfile

如果需要忽略行首尾的空白字符,只统计词汇本身的长度,可以调整命令为:

awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,"",$0); print $0, length($0)}' myfile

原有写法错误原因

  • sed本身没有内置的长度计算能力,也不能直接在替换规则中调用shell变量/命令,因此你尝试的两个sed命令都无法生效。
  • 你写的awk命令错误使用了system()函数,该函数返回的是外部命令的退出状态码而非输出结果,且嵌套awk的语法也完全错误,不需要额外调用外部awk命令,直接用内置length()即可实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 13:45:07