GVKun编程网logo

bash – 使用命令行工具计算排序序列中的重复项(shell排序例题)

6

关于bash–使用命令行工具计算排序序列中的重复项和shell排序例题的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于bash–使用命令行工具以排序顺序计数重复、bash–使用命令行工具计

关于bash – 使用命令行工具计算排序序列中的重复项shell排序例题的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于bash – 使用命令行工具以排序顺序计数重复、bash – 使用命令行工具计算文件中的行长度、bash – 列中的重复:随机保留一个、bash – 删除变量上的重复项而不进行排序等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

bash – 使用命令行工具计算排序序列中的重复项(shell排序例题)

bash – 使用命令行工具计算排序序列中的重复项(shell排序例题)

我有一个命令(cmd1),它通过日志文件来过滤掉一组数字.这些数字是随机顺序,因此我使用sort -gr来获得反向排序的数字列表.此排序列表中可能存在重复项.我需要找到该列表中每个唯一编号的计数.

例如,如果cmd1的输出是

100 100 100 99 99 26 25 24 24

我需要另一个命令,我可以管道上面的输出,以便我得到:

100 3 99 2 26 1 25 1 24 2
如果您可以处理输出格式略有不同,您可以:
cmd1 | tr " " "\n" | uniq -c

你会回来的:

3 100
  2 99
  1 26
  1 25
  2 24

bash – 使用命令行工具以排序顺序计数重复

bash – 使用命令行工具以排序顺序计数重复

我有一个命令(cmd1),通过日志文件greps过滤掉一组数字。数字是
按照随机顺序,所以我使用排序-gr得到一个反向排序的数字列表。其中可能有重复
这个排序列表。我需要找到该列表中每个唯一号码的计数。

例如,如果cmd1的输出是:

100 
100 
100 
99 
99 
26 
25 
24 
24

我需要另一个命令,我可以管道上面的输出,所以,我得到:

100     3
99      2
26      1
25      1
24      2
怎么样;
$ echo "100 100 100 99 99 26 25 24 24" | tr " " "\n" | sort | uniq -c | sort -k2nr | awk '{printf("%s %s ",$2,$1)}END{print}'
100 3 99 2 26 1 25 1 24 2

bash – 使用命令行工具计算文件中的行长度

bash – 使用命令行工具计算文件中的行长度

问题

如果我有一个长文件包含许多不同长度的行,我如何计算每行长度的出现次数?

例:

file.txt

this
is
a
sample
file
with
several
lines
of
varying
length

运行count_line_lengths file.txt将给出:

Length Occurences
1      1
2      2
4      3
5      1
6      2
7      2

想法?

count.awk:
{
  print length($0);
}

… …

$ awk -f count.awk input.txt | sort | uniq -c
      1 1
      2 2
      3 4
      1 5
      2 6
      2 7

bash – 列中的重复:随机保留一个

bash – 列中的重复:随机保留一个

我有一个文件(input.txt),其结构类似于:

abc    1
 bcd    a
 cde    1
 def    4
 efg    a
 fgh    3

我想删除第2列中的重复项,以便在该列中只包含唯一的字符串(独立于第1列中的内容).但选择的行应该是随意选择的.输出可以是例如:

bcd    a
 cde    1
 def    4
 fgh    3

我试图创建一个列出重复项的文件(使用awk'{print $2}’input.txt | sort | uniq -D | uniq)但是我只是设法用awk’删除所有’!A [$2]’而不是随机保留其中一个副本.

解决方法

预处理输入以使其随机化:

shuf input.txt | awk '!A[$2]++'

bash – 删除变量上的重复项而不进行排序

bash – 删除变量上的重复项而不进行排序

我有一个包含以下空格分隔条目的变量.
variable="apple lemon papaya avocado lemon grapes papaya apple avocado mango banana"

如何在不排序的情况下删除重复项?

#Something like this.
new_variable="apple lemon papaya avocado grapes mango banana"

我发现某个脚本可以完成删除变量的重复,但会对内容进行排序.

#Not something like this.
new_variable=$(echo "$variable"|tr " " "\n"|sort|uniq|tr "\n" " ")
echo $new_variable
apple avocado banana grapes lemon mango papaya
new_variable=$( awk 'BEGIN{RS=ORS=" "}!a[$0]++' <<<$variable );

以下是它的工作原理:

RS(输入记录分隔符)设置为空格,以便将$variable中的每个水果视为记录而不是字段.非排序独特的魔法发生在!a [$0].由于awk支持关联数组,因此它使用当前记录($0)作为数组a []的键.如果之前没有看到该键,则[$0]的计算结果为’0′(awk的未设置索引的默认值),然后将其取反以返回TRUE.然后我利用awk默认为’print $0’的事实,如果表达式返回TRUE并且没有给出'{commands}’.最后,然后递增[$0],使得该键不再返回TRUE,因此永远不会打印重复值. ORS(输出记录分隔符)也设置为空格以模仿输入格式.

产生相同输出的该命令的简洁版本如下:

awk 'BEGIN{RS=ORS=" "}{ if (a[$0] == 0){ a[$0] += 1; print $0}}'

得爱awk =)

编辑

如果你需要在纯Bash 2.1中这样做,我会建议:

#!/bin/bash    

variable="apple lemon papaya avocado lemon grapes papaya apple avocado mango banana"
temp="$variable"

new_variable="${temp%% *}"

while [[ "$temp" != ${new_variable##* } ]]; do
   temp=${temp//${temp%% *} /}
   new_variable="$new_variable ${temp%% *}"
done

echo $new_variable;

关于bash – 使用命令行工具计算排序序列中的重复项shell排序例题的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于bash – 使用命令行工具以排序顺序计数重复、bash – 使用命令行工具计算文件中的行长度、bash – 列中的重复:随机保留一个、bash – 删除变量上的重复项而不进行排序的相关知识,请在本站寻找。

本文标签: