【问题标题】:Bash couting using uniq an array使用 uniq 数组进行 Bash 计算
【发布时间】:2020-12-07 08:50:17
【问题描述】:

阵列让我在 Linux 上发疯。 我有两个数组称为 x, y。 这些数组包含一个重复疯狂次数的 IP。

x=(182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59 182.100.67.59)

y=(218.52.41.22 218.52.41.22 218.52.41.22 218.52.41.22 218.52.41.22 218.52.41.22 
218.52.41.22 218.52.41.22 218.52.41.22 218.52.41.22 218.52.41.22 218.52.41.22 
218.52.41.22 218.52.41.22 218.52.41.22 218.52.41.22 218.52.41.22 218.52.41.22 
218.52.41.22 218.52.41.22 218.52.41.22 218.52.41.22 218.52.41.22)


如何计算变量 x 和 y。使用类似 uniq 的东西。

(IFS=""; sort <<< "$x") | uniq -c

但它不起作用

编辑 1:

期望的输出:

6 182.100.67.59

24 218.52.41.22

编辑 2:

我已经实现了这个简单的:

for i in $x; do
            
            echo $i | uniq -c
            
            done

打印出来


      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59
      1 182.100.67.59

但期望的输出是:

15 182.100.67.59

【问题讨论】:

  • 你想“数”什么? “计算变量”?有两个变量——x 是一个变量,y 是另一个变量,两个变量。
  • 嗨@KamilCuk 我想计算变量X ip 182.100.67.59 重复了多少次
  • 变量x?那么y 是干嘛的呢?
  • @KamilCuk 有两个变量,因为 x 代表一种攻击 DOS,y 代表网络钓鱼攻击。因此,我想将它们表示为 IP 尝试进行攻击的次数。

标签: arrays linux bash loops


【解决方案1】:

首先在行上打印数组值。
然后排序。
然后是 uniq。

printf "%s\n" "${x[@]}" "${y[@]}" | sort | uniq -c

【讨论】:

  • 感谢您的快速回复,我将尝试此解决方案!好像就是这样! ;)
【解决方案2】:

您的代码只是打印第一个值。要读取整个数组,只需添加 $x[*]

(IFS=""; sort <<< "$x[*]") | uniq -c

【讨论】:

  • 可以分享一下你用过的脚本吗?
猜你喜欢
  • 2014-10-05
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
相关资源
最近更新 更多