awk / sed для тестовой команды

из моего кш у меня есть

  [[  ` echo $READ_LINE | awk '{print $2}' ` != SOME_WORD  ]] && print "not match"

Могу я получить предложение, как проверить то же самое без команды echo? (может быть, для этого подойдет awk / sed?)

Лидия


person lidia    schedule 30.08.2010    source источник


Ответы (3)


Примерно так будет работать:

awk -v x="$READ_LINE" -v y="SOME_WORD" 'BEGIN { split(x, a); if (a[2] != y) print "not match";}'

Но откуда $READ_LINE? Что вы пытаетесь достичь? Также может быть хорошее простое sh или ksh решение.

Я очень сомневаюсь в вашем утверждении, что echo (который может быть встроенной оболочкой) занимает больше времени, чем awk. Вот версия plain sh:

set -- $READ_LINE
[ x$2 != xSOME_WORD] && echo "not match" 

Но решение ksh Денниса Уильямсона лучше всего подходит для вашей ситуации.

person schot    schedule 30.08.2010
comment
цель состоит в том, чтобы сэкономить время (эхо не требует времени awk) - person lidia; 30.08.2010

Это разбивает строку по словам и проверяет второе слово.

var=($READ_LINE)
[[  ${var[1]} != SOME_WORD  ]] && print "not match"

Чего вы пытаетесь достичь? Некоторые из ваших вопросов почти идентичны.

person Dennis Williamson    schedule 30.08.2010
comment
var = ($ READ_LINE) недопустимый синтаксис в ksh! - person lidia; 30.08.2010
comment
@lidia: Какая версия ksh? Вы используете #!/bin/ksh, #!/usr/bin/ksh или #!/bin/sh в качестве первой строки вашего скрипта (shebang)? - person Dennis Williamson; 30.08.2010

если вы используете ksh, просто используйте оболочку без необходимости вызывать внешние команды

set -- $READ_LINE
case "$2" in
  "SOME_WORD" ) echo "found";;
esac

Почему вы все еще решаете эту проблему, если я вижу, что у вас есть другие темы, похожие на эту?

person ghostdog74    schedule 30.08.2010