Linux 计算每个'的总发生次数;版本';跨多个文件
我在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的所有行的总数-我找不到一个很好的方法来拆分不同的版本号。类似的方法
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
,这才真正解决了我的问题!