Инструмент командной строки для извлечения токена из потока 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