Я использовал этот сценарий 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