如何生成列

  • 本文关键字:何生成 bash grep
  • 更新时间 :
  • 英文 :


对不起,伙计们,我想知道,是否可以grep列?例如,我们有类似(vmstat)的输出:

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
0  0      0 706108  75536 328172    0    0   142    88  489 1042  5 11 84  0

如果我运行./script.sh in,输出将是:

$ ./script.sh in
$ 489

或者可能不是grep,但我只需要使用bash(为考试做准备)。提前谢谢。

我想你想要的是,你给一个列标题作为参数,比如inbuffwa。。。然后得到相应的值。

所以试试这个:

vmstat|awk -v f="in" '!o{for(x=1;x<=NF;x++)if($x==f){o=1;next}}o{print $x}'

这里CCD_ 5是列标题。"in"是硬编码的,它可以像f="$foo"一样是外壳变量

小测试,我将您的vmstat输出保存为out文件:

kent$  cat out
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
0  0      0 706108  75536 328172    0    0   142    88  489 1042  5 11 84  0
kent$  awk -v f="in" '!o{for(x=1;x<=NF;x++)if($x==f){o=1;next}}o{print $x}' out
489
kent$  awk -v f="buff" '!o{for(x=1;x<=NF;x++)if($x==f){o=1;next}}o{print $x}' out         
75536

以下是如何使用awk根据列name获取值:

vmstat | 
awk -v col="in" '
NR==2 {for (i=1; i<=NF; i++) if ($i == col) break} 
NR==3 {print $i}
'

bash脚本中的switch+awk命令应该可以解决问题

您可以使用cut来获取列。

vmstat | cut -b 57-60

因此,我提出了以下内容:

假设在名为test.txt:的文件中有一个包含以下行的文件

abe 123 bdb 532

xyz 593 iau 591

现在,您要查找包含第一个字段的行,该字段的第一个和最后一个字母都是元音。如果你做了一个简单的grep,你会得到这两行,但下面只会给你第一行,这是你想要的输出:

egrep "^([0-z]{1,} ){0}[aeiou][0-z]+[aeiou]" test.txt

然后你想找到包括第三个字段的行,其中第一个和最后一个字母是元音。类似地,如果你做了一个简单的grep,你会得到这两行,但下面只会给你第二行,这是你想要的输出:

egrep "^([0-z]{1,} ){2}[aeiou][0-z]+[aeiou]" test.txt

第一个大括号{1,}中的值指定前面的字符(根据ASCII表,范围从0到z)可以出现任意次数。在这之后,我们得到了这个例子中的字段分隔符空间。更改第二个大括号{0} or {2} to the desired field number-1内的值。然后,使用正则表达式来提及您的条件。

相关内容

  • 没有找到相关文章

最新更新