【发布时间】:2017-08-20 21:23:36
【问题描述】:
我是在 mac 上使用终端的新手,并且有一个大的 .tsv 文件,其中包含一个项目列表和旁边的两个值。我希望能够在第一次出现的项目旁边打印重复的数量,而无需删除其他数据。
我知道 cut -f 1 |排序 | uniq -c 但这会删除我想保留以供分析的许多有价值的数据。我正在阅读有关 awk 和 grep 的信息,但我想我需要一点帮助。
这是我正在尝试处理的文件的示例:
fruit number reference
apple 12 342
apple 13 345
apple 43 4772
banana 19 234
banana 73 3242
peach 131 53423
peach 234 3266
peach 242 324
peach 131 56758
peaches 29 2434
理想情况下,输出应如下所示:
fruit number reference fruit_count
apple 12 342 3
apple 13 345
apple 43 4772
banana 19 234 2
banana 73 3242
peach 131 53423 4
peach 234 3266
peach 242 324
peach 131 56758
peaches 29 2434 1
这样的事情可能吗?我可以使用公式获得所需的输出 excel,但文件太大并且不断崩溃。任何帮助将不胜感激。
编辑:添加我当前的解决方案(不符合我的要求)
cut -f 1 fruitsample.txt | sort | uniq -c | sed -e 's/ *//' -e 's/ / /'
这给了我预期的计数,将 uniq -c 的标准计数 + 空格输出替换为制表符,但它也会对标题行进行排序并删除第二列和第三列。
在 Excel 上,我可以使用公式 =IF(COUNTIF(A$2:A2,A2)=1,COUNTIF(A:A,A2),"") 并填写它。我正在处理的文件有将近 680K 行数据,而 Excel 在尝试计算这么多行时会卡住。
正如我所提到的,我是一个寻求指导的初学者。我只是对 awk 或 grep 不太熟悉。再次感谢!
【问题讨论】:
-
我已投票决定关闭此问题,因为它似乎是请求推荐工具或解决方案,而不是请求帮助您自己的代码。这使您的问题与 StackOverflow 无关。如果该评估不正确,并且您确实需要帮助编写自己的代码,请add your work so far to your question,我很乐意撤回我的近距离投票。
-
@ghoti 添加了我正在使用的命令。
-
关闭投票被撤回。
标签: unix awk terminal gnu-coreutils