Linux 计算每个'的总发生次数;版本';跨多个文件

Linux 计算每个'的总发生次数;版本';跨多个文件,linux,bash,grep,Linux,Bash,Grep,我在Linux上的一个目录中有许多文件,每个文件都包含一行version,格式为:#version x(其中x是版本号) 我试图找到一种方法来计算每个不同版本在所有文件中出现的次数,并输出如下内容: #version 1: 12 #version 2: 36 #version 3: 2 我不知道可能存在的所有潜在版本,所以我确实在尝试匹配包含#version的行 我尝试过使用诸如grep-c-但是这只给出了包含#version的所有行的总数-我找不到一个很好的方法来拆分不同的版本号。类似的方法

我在Linux上的一个目录中有许多文件,每个文件都包含一行
version
,格式为:
#version x
(其中x是版本号)

我试图找到一种方法来计算每个不同版本在所有文件中出现的次数,并输出如下内容:

#version 1: 12
#version 2: 36
#version 3: 2
我不知道可能存在的所有潜在版本,所以我确实在尝试匹配包含
#version
的行


我尝试过使用诸如
grep-c
-但是这只给出了包含
#version
的所有行的总数-我找不到一个很好的方法来拆分不同的版本号。

类似的方法可能会起到作用:

grep -h '#version' * | sort | uniq -c | awk '{print $2,$3": found "$1}'
示例文件:

filename:filecontent

file1:#version 1
file1.1:#version 1
file111:#version 1
file2:#version 2
file3:#version 3
file4:#version 4
file44:#version 4
输出:

#version 1: found 3
#version 2: found 1
#version 3: found 1
#version 4: found 2
grep version*
获取所有版本的文件。
sort
uniq-c
的结果进行排序,该结果统计重复数,然后
awk
重新安排输出以获得所需的格式


注意:
grep
的分隔符可能与操作系统上的
稍有不同。

类似的东西可能会起到以下作用:

grep -h '#version' * | sort | uniq -c | awk '{print $2,$3": found "$1}'
示例文件:

filename:filecontent

file1:#version 1
file1.1:#version 1
file111:#version 1
file2:#version 2
file3:#version 3
file4:#version 4
file44:#version 4
输出:

#version 1: found 3
#version 2: found 1
#version 3: found 1
#version 4: found 2
grep version*
获取所有版本的文件。
sort
uniq-c
的结果进行排序,该结果统计重复数,然后
awk
重新安排输出以获得所需的格式


注意:
grep
的分隔符可能与操作系统上的
稍有不同。

一种可能是多个命令:

strings * | grep '#version \w' | sort | uniq --count | awk '{printf("%s: %s\n", substr($0, index($0, $2)), $1)}''
业务细分:

  • strings*
    :从当前目录中的所有文件中提取文本字符串
  • |grep'#version\w'
    :将字符串导入
    grep
    命令,以查找所有出现的
    #version word
  • sort
    :将版本字符串传输到
    sort
    命令
  • |uniq--count
    :将出现的
    #version
    行导入
    uniq
    命令,以输出每个
    #version…
    字符串的计数
  • awk'{printf(“%s:%s\n”,substr($0,index($0,$2)),$1)}
    :将唯一计数导入
    awk
    命令,以将输出重新格式化为:
    #version…:count
测试流程:

cd /tmp
mkdir testing 2>/dev/null || true
cd testing
# Create 10 testfile#.txt with random #version 1 to 4
for i in {1..10}; do
 echo "#version $(($RANDOM%4+1))" >"testfile${i}.txt"
done
# Now get the counts per version
strings * \
  | grep '#version \w' \
  | sort \
  | uniq --count \
  | awk '{printf("%s: %s\n", substr($0, index($0, $2)), $1)}'
测试输出示例:

#版本1:4
#版本2:2
#版本3:1
#版本4:3

一种可能是多个命令:

strings * | grep '#version \w' | sort | uniq --count | awk '{printf("%s: %s\n", substr($0, index($0, $2)), $1)}''
业务细分:

  • strings*
    :从当前目录中的所有文件中提取文本字符串
  • |grep'#version\w'
    :将字符串导入
    grep
    命令,以查找所有出现的
    #version word
  • sort
    :将版本字符串传输到
    sort
    命令
  • |uniq--count
    :将出现的
    #version
    行导入
    uniq
    命令,以输出每个
    #version…
    字符串的计数
  • awk'{printf(“%s:%s\n”,substr($0,index($0,$2)),$1)}
    :将唯一计数导入
    awk
    命令,以将输出重新格式化为:
    #version…:count
测试流程:

cd /tmp
mkdir testing 2>/dev/null || true
cd testing
# Create 10 testfile#.txt with random #version 1 to 4
for i in {1..10}; do
 echo "#version $(($RANDOM%4+1))" >"testfile${i}.txt"
done
# Now get the counts per version
strings * \
  | grep '#version \w' \
  | sort \
  | uniq --count \
  | awk '{printf("%s: %s\n", substr($0, index($0, $2)), $1)}'
测试输出示例:

#版本1:4
#版本2:2
#版本3:1
#版本4:3

如何从文件中获取上述行?我不认为标签
bash
适用于这个问题,你如何从文件中获取上面的行?我认为标签
bash
不适用于这个问题,谢谢你-最终确切的格式并不重要,所以我选择了更简单的:
grep-h'#version\w'*| sort | uniq--count
但是接受你的答案,因为它是
uniq--count
,这才真正为我解决了这个问题!感谢您的帮助-最终,确切的格式并不重要,所以我选择了更简单的:
grep-h'#version\w'*|sort | uniq--count
但接受您的答案,因为它是
uniq--count
,这才真正解决了我的问题!