string - 计算汉字个数并添加到行尾
问题描述
我有一个文件,每行都有一个中文单词,如下所示:
王大明
新型传染病
電子雷射
我想在每一行的末尾添加汉字的数量:
王大明 3
新型传染病 5
電子雷射 4
我怎样才能做到这一点?
我知道命令,sed, wc
. 但是,我无法完成这项工作。我尝试了很多东西,但显然我需要帮助。
sed -i s/$/{length $0}/ myfile
sed -i s/$/{wc -m}/ myfile
awk '{$2=system(awk 'length') OFS $2} 1' myfile
解决方案
究竟什么会起作用将完全取决于您的输入到底是什么样的。如果您正在处理 Unicode 字形,请使用可识别 Unicode 的工具,例如 Python。
bash$ cat uniline
#!/usr/bin/env python3
import sys
for line in sys.stdin:
line = line.rstrip('\n')
print(line, len(line))
bash$ chmod +x uniline
bash$ uniline <<\:
> 王大明
> 新型传染病
> 電子雷射
> :
王大明 3
新型传染病 5
電子雷射 4
(在您发布的示例中,我不得不从行尾修剪一些空格。)
作为记录,我的系统编码是 UTF-8,这意味着第一行的字节表示是
bash$ echo '王大明' | xxd
00000000: e78e 8be5 a4a7 e698 8e0a ..........
对于某些相关背景,也许另请参阅有关解码错误的问题。
如果你幸运的话,甚至是 Awk 并且wc
可能在你的平台上具有区域设置意识。您的sed
尝试确实没有成功的机会(尽管如果您有 GNU sed
,您可以尝试使用该/e
选项;但实际上,可能不会)。如果您有 GNU Awk 并en_US.UTF-8
定义了语言环境,这也可以:
bash$ echo $'\xe7\x8e\x8b\xe5\xa4\xa7\xe6\x98\x8e' |
> LC_ALL=en-US.UTF-8 awk '{ print $0, length }'
王大明 3
推荐阅读
- git - git rebase 的行为不符合预期
- javascript - 如何将对象值转换为数组并添加新值
- sql - 如何替换 Oracle PIVOT IN 子句中的预定义值
- android - 谷歌支持确认未收到有关缺少密钥库 android 的信息
- file - git 裸存储库中的已删除文件
- keycloak - Keycloak 令牌交换 refresh_token requested_token_type 不支持
- python - 使用ffmpeg从两个视频中同时提取帧
- python - 使用请求发布 JSON 数组
- flutter - 在“projectname”中运行“flutter pub get”第 1 行第 1 列错误退出代码 65
- php - ACF 转发器 - 如果子字段在任何行中有值:做某事