Разница в условиях /test

Вот не такой уж и симпатичный лайнер в awk:

awk '{ if (prev && prev != $1) { print prev, sum; sum = 0 }; sum += $2; prev = $1 } END { print prev, sum }' < file.txt

Он требует, чтобы строки с одинаковым значением в первом поле были сгруппированы вместе. Если это не так, вы можете sort file.txt | awk ... .

1
17.03.2016, 13:00
1 ответ
if command; then ...

оценивает статус выхода команды. 0 - успех (оценивает условие как true).

Прежде всего: [ (почти) идентичен test, поэтому он ожидает, что строка command будет соответствовать его синтаксису.

if [ $(command) ]; then ...

оценивает строку, содержащую вывод command. В большинстве случаев это не сработает - см. пример ниже.

[ command ] && ..

grep -l "mail" "file" будет интерпретирован следующим образом:

  • grep - строка
  • -l - унарный оператор, возвращающий длину следующей строки
  • "mail" - строка, будет передана в качестве аргумента оператору -l
  • "file" - строка

В зависимости от реализации вы получите немного разные ошибки, потому что выше приведена просьба [ оценить последовательность, состоящую из строки, числа и другой строки, без каких-либо операторов. По умолчанию [ (как и test) является встроенной оболочкой, вы можете сравнить сообщения об ошибках с отдельным бинарником (обычно /bin/[ или /usr/bin/[).

1
27.01.2020, 23:48

Теги

Похожие вопросы