Инструмент командной строки для извлечения токена из потока stdin?

Я использовал этот 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 может это делать, но синтаксис регулярных выражений немного сложен для ввода каждый раз (мне не нужен дополнительный синтаксис, так как я часто его использую)

Спасибо,

2 ответа

Решение

Резать работает точно так же, с очень небольшой сложностью

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

Команда 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
Другие вопросы по тегам