【问题标题】:Get unique string occurrence and display it获取唯一的字符串出现并显示它
【发布时间】:2021-02-17 22:02:20
【问题描述】:

我不太擅长awk,所以在这里我只是计算了一行中出现的次数:

input.txt 有这个:

18 18 21 21 21 21 18 21

我只想显示上面出现的唯一编号。所以,这是我的代码:

input="input.txt"

output=$(fmt -1 "$input" | sort | uniq | awk '{printf $1","}')

echo "$output"

输出:

18,21,

我得到了正确的结果,但最后的逗号,,我该如何删除那个逗号?另外,有没有不使用fmt的更简单或更干净的方法?

预期输出:

18,21

编辑删除逗号,我用这个:

sed 's/,$//'

它正在工作,但有没有更简单的方法可以在不使用fmt 的情况下做到这一点?

【问题讨论】:

  • 对不起,我得到了它:sed 's/,$//',但是没有 fmt 有没有更简单的方法?

标签: awk


【解决方案1】:

请您尝试关注一下。

awk '
BEGIN{ OFS="," }
{
  for(i=1;i<=NF;i++){
    if(!arr[$i]++){
      val=(val?val OFS:"")$i
    }
  }
  print val
  val=""
}' Input_file

说明:为上述添加详细说明。

awk '                          ##Starting awk program from here.
BEGIN{ OFS="," }               ##Setting output field separator as comma here.
{
  for(i=1;i<=NF;i++){          ##Traversing through all fields of currnet line here.
    if(!arr[$i]++){            ##Checking condition if arr is NOT having current field present in it
      val=(val?val OFS:"")$i   ##Creating val and keep adding values to it, to print at last all values.
    }
  }
  print val                    ##printing val here.
  val=""                       ##Nullify val here.
}' Input_file                  ##mentioning Input_file name here.

【讨论】:

  • 如果使用这个解决方案,有没有办法把逗号放在?
  • @Azimah,完成请现在检查并告诉我?
  • 谢谢你这是有效的,这个代码是纯的awk,这是我需要的。我只能在 4 分钟内接受这个答案(网站告诉)。也非常感谢您的评论工作。
【解决方案2】:

这是gnu awk中的另一种方式:

awk -v RS='[[:blank:]]+' '!seen[$1]++{s=s (s!=""?",":"") $1} END{print s}' file.txt
18,21

【讨论】:

  • 不错的解决方案,但与 OP 的预期输出格式不完全匹配。而且,我认为 regexp RS 是 GNU awk 特定的
【解决方案3】:

较新版本的perl 在标准库中有uniq。否则,您将不得不手动编写逻辑 (How do I print unique elements in Perl array?) 或使用 https://metacpan.org/pod/List::MoreUtils

perl -MList::Util=uniq -lane 'print join ",", uniq @F'

perl -lane 'print join ",", grep { !$seen{$_}++ } @F'

ruby

ruby -ane 'puts $F.uniq * ","'

【讨论】:

  • ++ awk 缺少这个内置的join
猜你喜欢
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 2017-03-21
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多