从Linux上的字符串中删除重复字符,带有尴尬

聪明的尴尬命令可以使从字符串中删除重复字符变得容易。

  • 在脸书上分享
  • 分享到Twitter
  • 分享LinkedIn
  • 分享Reddit
  • 通过电子邮件分享
  • 打印资源

尴尬命令可以使从字符串中删除重复字符的命令,即使这些字符不顺序,尤其是当该过程变成脚本时。

首先,尴尬命令我们将使用字符串中的每个字母来使用开始。在更常见的命令中,您可能会看到尴尬做这样的事情:

$ ECHO ONE:二:三|awk‘begin {fs =“:”};{打印$ 2}’两个

       

FS该命令的一部分指定字段分离器 - 用于分离字符串中字段的字符,以便可以单独处理它们。

但是,我们的脚本所做的是使用“”(即没有字符)的字段分离器。这说明了尴尬没有场分离器。换句话说,每个角色都被视为本身就是一个领域。这是几个例子:

$ ECHO ONE:二:三|awk‘begin {fs =“”};{打印$ 2}’n $ echo One:二:三|awk‘begin {fs =“”};{打印$ 4}’:

请注意,上面的命令最终显示了字符串中的第二和第四个字符,而不是第二和第四个“字段”,并且在空白,字母和各种标点符号之间没有区别。

一个bash使用的脚本尴尬删除重复的字符可能看起来像这样:

#!bin/bash echo -n “Enter string: “ read string awk -v FS="" ‘{ for(i=1;i<=NF;i++) str=(++a[$i]==1?str $i:str) } END {print str}’ <<< $string

该脚本提示字符串,然后使用尴尬一次贯穿其中一个角色。它将每个连续字符添加到字符串(str)只有该角色尚未包含。否则角色将留在其原始位置,没有分类或进一步处理。这是运行它的示例:

$ ./rmdups Enter String:让我们快照风筝!让我们吧!

请注意,每个角色仅在“让我们的Goflyaki!”中出现一次。结果。该过程的最终结果显示在打印语句中结尾部分尴尬命令。

如果您想通过查看添加字符时的字符字符串来查看脚本的工作方式,则可以使用此版本的脚本:

#!/bin/bash echo -n “Enter string: “ read characters awk -v FS="" ‘{ for(i=1;i<=NF;i++) { str=(++a[$i]==1?str $i:str) print str#<==观看它成长}}结束{print str}’<<< $ string

用额外的脚本运行脚本打印命令,您会看到这样的输出:

$ ./rmdups2 Enter String:让我们快照风筝!让我们让我们来吧,让我们走吧,让我们的gofl让我们的gofly让我们gofly让我们的goflya让goflya让goflya让goflyak让我们的goflyaki让我们的goflyaki让goflyaki让我的goflyaki让Goflyaki让我们的goflyaki!让我们吧!

请注意,仅当字符串中尚未包含当前字符时,字符串才会成长。

您也可以简单地将脚本实现为尴尬这样的脚本:

awk -v fs =“”’{for(i = 1; i <= nf; i ++)str =(++ a [$ i] == 1?str $ i:str)} end end {print {print str}’

然后您可以运行尴尬这样的脚本:

$ ECHO“让我们飞起风筝!”|rmdups.awk,让我们的goflyaki!

包起来

每当处理重复的字符不止一次时,都会严重浪费处理能力尴尬如本文中所示的那样,可以很容易地将它们删除。

加入网络世界社区有个足球雷竞技appFacebookLinkedIn评论最重要的主题。
有关的:

版权所有©2022 IDG ComRaybet2munications,Inc。