我一直在使用这个 perl 脚本在命令行上从流中获取令牌
1 #!/usr/bin/perl
2
3 $i = $ARGV[0];
4
5 while (<STDIN>) {
6 @tokens = split /\s+/;
7 print $tokens[$i] . "\n";
8 }
典型用法如下
mjeong@login:~/bin$ qstat | grep XXX.0.par
1664011 0.00063 XXX.0.par mjeong qw 11/05/2010 10:34:37 16
mjeong@login:~/bin$ qstat | grep XXX.0.par | token.pl 0
1664011
mjeong@login:~/bin$ qstat | grep XXX.0.par | token.pl 1
0.00063
出于好奇,是否有一个标准的实用程序可以用类似(=简单)的界面来执行此操作 - 这样我就不必为任何新机器编写这个小脚本了?我知道 Awk/Sed 可以做到这一点,但每次输入正则表达式语法都有点复杂(我需要简单的语法,因为我经常使用它)
谢谢,
答案1
cut 的工作原理完全相同,几乎没有增加复杂性
mjeong@login:~/bin$ qstat | grep XXX.0.par | cut -d ' ' -f 1
1664011
mjeong@login:~/bin$ qstat | grep XXX.0.par | cut -d ' ' -f 2
0.00063
答案2
执行此操作的 AWK 命令不需要正则表达式,但它grep
也可以使用正则表达式来完成该部分操作:
$ qstat | awk '/XXX.0.par/ {print $1}'
1664011
$ qstat | awk '/XXX.0.par/ {print $1}'
0.00063
您也可以在 Bash 中相当简单地完成此操作:
$ line=($(qstat | grep XXX.0.par)); echo ${line[0]}
1664011