Назад | Перейти на главную страницу

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

Спасибо,

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

Команда 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