命令行工具从标准输入流中提取标记?

命令行工具从标准输入流中提取标记?

我一直在使用这个 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

相关内容