Unix 多参数Grep

Unix 多参数Grep,unix,grep,arguments,Unix,Grep,Arguments,我是一名生物技术专业的新生,正在做编程入门作业,我遇到了麻烦。问题如下 3在新的“.bashrc1”文件中,每行上有多少空格分隔的第二个条目中有数字0…9?通过管道将答案输出到一个新文件“.bashrc1.counts”,格式为“number,count…”,例如0,12 到目前为止我所做的是 more .bashrc1 | awk ‘{print $2}’ | grep –c “0..9” > .bashrc1.counts 我知道grep部分可能是错的,有没有办法通过一个范围?像

我是一名生物技术专业的新生,正在做编程入门作业,我遇到了麻烦。问题如下

3在新的“.bashrc1”文件中,每行上有多少空格分隔的第二个条目中有数字0…9?通过管道将答案输出到一个新文件“.bashrc1.counts”,格式为“number,count…”,例如0,12

到目前为止我所做的是

more .bashrc1 |  awk ‘{print $2}’ | grep –c “0..9” > .bashrc1.counts
我知道grep部分可能是错的,有没有办法通过一个范围?像

grep -c "0","1"... etc
或者我必须做什么

|grep -c "0"|grep -c "1"|
此外,我知道如何输出到文件,但我究竟如何以这种方式格式化输出? 我已经用尽了谷歌和我的课堂讲稿,似乎找不到任何与我的问题相关的信息

编辑:我要浏览的文件;只需添加一个别名的default.bashrc文件的副本

# Sample .bashrc for SuSE Linux
# Copyright (c) SuSE GmbH Nuernberg
# There are 3 different types of shells in bash: the login shell, normal shell
# and interactive shell. Login shells read ~/.profile and interactive shells
# read ~/.bashrc; in our setup, /etc/profile sources ~/.bashrc - thus all
# settings made here will also take effect in a login shell.
#
# NOTE: It is recommended to make language settings in ~/.profile rather than
# here, since multilingual X sessions would not work properly if LANG is over-
# ridden in every subshell.
# Some applications read the EDITOR variable to determine your favourite text
# editor. So uncomment the line below and enter the editor of your choice :-)
#export EDITOR=/usr/bin/vim
#export EDITOR=/usr/bin/mcedit
# For some news readers it makes sense to specify the NEWSSERVER variable here
#export NEWSSERVER=your.news.server
# If you want to use a Palm device with Linux, uncomment the two lines below.
# For some (older) Palm Pilots, you might need to set a lower baud rate
# e.g. 57600 or 38400; lowest is 9600 (very slow!)
#
#export PILOTPORT=/dev/pilot
#export PILOTRATE=115200
test -s ~/.alias && . ~/.alias || true
alias start = "ls ~"   

据我所知,您的输出应该包含从0到9的每个数字的单独条目,因此,如果没有循环,您可能无法使用1个命令生成它

使用for循环,您可以执行以下操作

for c in {0..9}; do
     cut -d ' ' -f 2 .bashrc1 | grep -c "$c" >> .bashrc1.counts
done

据我所知,您的输出应该包含从0到9的每个数字的单独条目,因此,如果没有循环,您可能无法使用1个命令生成它

使用for循环,您可以执行以下操作

for c in {0..9}; do
     cut -d ' ' -f 2 .bashrc1 | grep -c "$c" >> .bashrc1.counts
done
在awk中:

awk '$2~/\d+/{print $2}' .bashsrc
在perl中

perl -F" " -ane 'if($F[1]=~m/\d+/){print $F[1]}' .bashsrc
在awk中:

awk '$2~/\d+/{print $2}' .bashsrc
在perl中

perl -F" " -ane 'if($F[1]=~m/\d+/){print $F[1]}' .bashsrc
试试这个:

更多.bashrc1 | awk'{print$2}'| grep–n[0-9]>.bashrc1.counts

尝试以下方法:


更多.bashrc1 | awk{print$2}| grep–n[0-9]>.bashrc1.counts

以下是我如何处理它的:

awk -v c0=0 -v c1=0 -v c2=0 -v c3=0 -v c4=0 -v c5=0 -v c6=0 -v c7=0 -v c8=0 -v c9=0 \
'$2~/0/{ c0+=1 } \
$2~/1/{ c1+=1 } \
$2~/2/{ c2+=1 } \
$2~/3/{ c3+=1 } \
$2~/4/{ c4+=1 } \
$2~/5/{ c5+=1 } \
$2~/6/{ c6+=1 } \
$2~/7/{ c7+=1 } \
$2~/8/{ c8+=1 } \
$2~/9/{ c9+=1 } \
END {print  "0," c0 "\n1," c1 "\n2," c2 "\n3," c3 "\n4," c4 "\n5," c5 "\n6," c6 "\n7," c7 "\n8," c8 "\n9," c9}' file
基本上,这定义了一个变量来计算第二项c0,c1。。。c9,并从0开始计数

然后,对于每一行,如果第二项包含一个或多个0,则无论第二项中可能有多少个0,它都会将c0增加1。如果它包含1,则递增c1,以此类推。然后它以你指定的方式打印出来,c

输出:

0,1
1,1
2,1
3,0
4,0
5,1
6,0
7,0
8,0
9,0
0,2
1,2
2,1
3,0
4,0
5,1
6,0
7,0
8,0
9,0
如果您需要确切了解每个数字在第二学期中出现的次数,请使用以下选项:

awk -v c0=0 -v c1=0 -v c2=0 -v c3=0 -v c4=0 -v c5=0 -v c6=0 -v c7=0 -v c8=0 -v c9=0 \
'$2~/0/{ split($2,a0,"0"); c0+=(length(a0)-1) } \
$2~/1/{ split($2,a1,"1"); c1+=(length(a1)-1) } \
$2~/2/{ split($2,a2,"2"); c2+=(length(a2)-1) } \
$2~/3/{ split($2,a3,"3"); c3+=(length(a3)-1) } \
$2~/4/{ split($2,a4,"4"); c4+=(length(a4)-1) } \
$2~/5/{ split($2,a5,"5"); c5+=(length(a5)-1) } \
$2~/6/{ split($2,a6,"6"); c6+=(length(a6)-1) } \
$2~/7/{ split($2,a7,"7"); c7+=(length(a7)-1) } \
$2~/8/{ split($2,a8,"8"); c8+=(length(a8)-1) } \
$2~/9/{ split($2,a9,"9"); c9+=(length(a9)-1) } \
END {print  "0," c0 "\n1," c1 "\n2," c2 "\n3," c3 "\n4," c4 "\n5," c5 "\n6," c6 "\n7," c7 "\n8," c8 "\n9," c9}' file
与上面相同,但它将第二项拆分为我们要查找的数字上的一个数组,并将计数器变量的增量乘以该数组的长度减1。这有效地给出了找到数字的次数

输出:

0,1
1,1
2,1
3,0
4,0
5,1
6,0
7,0
8,0
9,0
0,2
1,2
2,1
3,0
4,0
5,1
6,0
7,0
8,0
9,0

以下是我如何应对的:

awk -v c0=0 -v c1=0 -v c2=0 -v c3=0 -v c4=0 -v c5=0 -v c6=0 -v c7=0 -v c8=0 -v c9=0 \
'$2~/0/{ c0+=1 } \
$2~/1/{ c1+=1 } \
$2~/2/{ c2+=1 } \
$2~/3/{ c3+=1 } \
$2~/4/{ c4+=1 } \
$2~/5/{ c5+=1 } \
$2~/6/{ c6+=1 } \
$2~/7/{ c7+=1 } \
$2~/8/{ c8+=1 } \
$2~/9/{ c9+=1 } \
END {print  "0," c0 "\n1," c1 "\n2," c2 "\n3," c3 "\n4," c4 "\n5," c5 "\n6," c6 "\n7," c7 "\n8," c8 "\n9," c9}' file
基本上,这定义了一个变量来计算第二项c0,c1。。。c9,并从0开始计数

然后,对于每一行,如果第二项包含一个或多个0,则无论第二项中可能有多少个0,它都会将c0增加1。如果它包含1,则递增c1,以此类推。然后它以你指定的方式打印出来,c

输出:

0,1
1,1
2,1
3,0
4,0
5,1
6,0
7,0
8,0
9,0
0,2
1,2
2,1
3,0
4,0
5,1
6,0
7,0
8,0
9,0
如果您需要确切了解每个数字在第二学期中出现的次数,请使用以下选项:

awk -v c0=0 -v c1=0 -v c2=0 -v c3=0 -v c4=0 -v c5=0 -v c6=0 -v c7=0 -v c8=0 -v c9=0 \
'$2~/0/{ split($2,a0,"0"); c0+=(length(a0)-1) } \
$2~/1/{ split($2,a1,"1"); c1+=(length(a1)-1) } \
$2~/2/{ split($2,a2,"2"); c2+=(length(a2)-1) } \
$2~/3/{ split($2,a3,"3"); c3+=(length(a3)-1) } \
$2~/4/{ split($2,a4,"4"); c4+=(length(a4)-1) } \
$2~/5/{ split($2,a5,"5"); c5+=(length(a5)-1) } \
$2~/6/{ split($2,a6,"6"); c6+=(length(a6)-1) } \
$2~/7/{ split($2,a7,"7"); c7+=(length(a7)-1) } \
$2~/8/{ split($2,a8,"8"); c8+=(length(a8)-1) } \
$2~/9/{ split($2,a9,"9"); c9+=(length(a9)-1) } \
END {print  "0," c0 "\n1," c1 "\n2," c2 "\n3," c3 "\n4," c4 "\n5," c5 "\n6," c6 "\n7," c7 "\n8," c8 "\n9," c9}' file
与上面相同,但它将第二项拆分为我们要查找的数字上的一个数组,并将计数器变量的增量乘以该数组的长度减1。这有效地给出了找到数字的次数

输出:

0,1
1,1
2,1
3,0
4,0
5,1
6,0
7,0
8,0
9,0
0,2
1,2
2,1
3,0
4,0
5,1
6,0
7,0
8,0
9,0

你能显示你正在变灰的文件的内容吗?那会容易些。哦,你不需要更多了。。。请参阅。将该文件添加到原始帖子中!谢谢大家的回答和解释,真的很有帮助!你能显示你正在变灰的文件的内容吗?那会容易些。哦,你不需要更多了。。。请参阅。将该文件添加到原始帖子中!谢谢大家的回答和解释,真的很有帮助!只是为了回答这个问题,有没有办法通过一个范围?对于Eogcloud,语法是[0-9],您可以在[0-9A-F]范围内执行多个操作,并混合使用单个字符grep[x0-9A-F]filename+这里是1,因为当我读到它时,你必须分别计算每个数字。只是为了回答这个问题,有没有办法传递一个范围?对于Eogcloud,语法是[0-9],您可以在[0-9A-F]范围内执行多个操作,并混合使用单个字符grep[x0-9A-F]filename+这里是1,因为当我读到它时,你必须分别计算每个数字。也适用于更多,正如@uncible在对该问题的评论中指出的那样。也适用于更多,正如@uncible在对该问题的评论中指出的那样。