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

如何格式化Linux中uniq -c命令输出的数据?

问题与解决方法

问题背景

现有temp_data.txt文件内容:

"John","001-01-0001","engineering"
"Smith","192-11-0292","human resources"
"Brian","192-11-0292","operations"
"Lucius","992-11-0292","human resources"
"Smith","192-11-0292","human resources"

执行sort temp_data.txt | uniq -c > temp_data_count.txt后,得到的temp_data_count.txt内容为:

1 "John","001-01-0001","engineering" 
2 "Smith","192-11-0292","human resources" 
1 "Brian","192-11-0292","operations" 
1 "Lucius","992-11-0292","human resources"

需要将其转换为计数加引号并前置的格式:

"1","John","001-01-0001","engineering" 
"2","Smith","192-11-0292","human resources" 
"1","Brian","192-11-0292","operations" 
"1","Lucius","992-11-0292","human resources"

此前尝试awk '{print "\x22" $2 "\x22",$1}'出现数据截断,原因是awk默认以空格为字段分隔符,"human resources"中的空格会把该行拆分为多个字段,导致输出内容不完整。

正确解决方法

方法1:处理已有temp_data_count.txt文件

使用awk修改字段分隔符,并清除计数中的空格:

awk -F'"' '{gsub(/ /,"",$1); print "\""$1"\","$2","$3","$4}' temp_data_count.txt
  • -F'"'把双引号设为字段分隔符,确保含空格的字段不会被拆分;
  • gsub(/ /,"",$1)清除计数字段中的多余空格;
  • 最后拼接成目标格式输出。

方法2:另一种字段处理思路

提取计数后,拼接剩余内容:

awk '{count=$1; $1=""; gsub(/^ /,"",$0); print "\""count"\","$0}' temp_data_count.txt
  • 先把第一个字段(计数)存入变量count;
  • 清空$1后,用gsub(/^ /,"",$0)去掉行首的空格;
  • 把带引号的计数和处理后的行内容拼接输出。

方法3:一步完成去重计数与格式转换

无需生成中间文件temp_data_count.txt,直接用awk完成统计和格式输出:

sort temp_data.txt | awk '{count[$0]++} END{for (line in count) print "\""count[line]"\","line}'
  • sort先对原文件内容排序;
  • awk用数组count统计每行出现的次数;
  • 最后遍历数组,输出带引号的计数和对应行内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:13:26