【问题标题】:Uniq a column and print out number of rows in that columnUniq 一列并打印出该列中的行数
【发布时间】:2021-05-09 13:29:46
【问题描述】:

我有一个文件,带有标题

name, age, id, address 
Smith, 18, 201392, 19 Rand Street, USA
Dan, 19, 029123, 23 Lambert Rd, Australia
Smith, 20, 192837, 61 Apple Rd, UK
Kyle, 25, 245123, 103 Orange Rd, UK

我想整理出重复的名字,所以结果是:

Smith, 18, 201392, 19 Rand Street, USA
Dan, 19, 029123, 23 Lambert Rd, Australia
Kyle, 25, 245123, 103 Orange Rd, UK

# prints 3 for 3  unique rows at column name

我尝试过sort -u -t, -k1,1 fileawk -F"," '!_[$1]++' file,但它不起作用,因为我的地址中有逗号。

【问题讨论】:

  • 所以只有名字的第一次出现在结果文件上? Kyle 呢?
  • @Niloct 是的。已编辑,抱歉!错过了
  • 试试 awk -F, 'NR==1||seen[$1]{next}{seen[$1]++}1' 文件
  • awk -F"," '!_[$1]++' file 有效,如果您不需要输出标题,则必须丢弃第一个输出行。
  • 这能回答你的问题吗? Is there a way to 'uniq' by column?

标签: shell awk


【解决方案1】:

好吧,您更改了自 OP 以来的功能,但这应该会在您的文件中获得唯一的名称(考虑到它被命名为 data),未排序:

#!/bin/bash
sed "1 d" data | awk -F"," '!_[$1]++ { print $1 }'

如果需要排序,请在上面的命令行中追加| sort

并将| wc -l 附加到命令行以计算行数。

【讨论】:

  • 我传递了一个wc -l 来计算唯一名称的数量,但当实际数量为 10 时它返回 11。您认为这是为什么?
  • 数据文件中是否有空换行符?可能您的最后一行带有换行符且没有内容。
  • 对。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多