bash :синтаксически поменять местами две команды, но сохранить тот же порядок выполнения

Вам нужно сделать это:

perl -F, -lane 'print if $F[7] eq "NAB-ITSA-LINUX-7"' URT_Compare_20180715191103.csv

Как только вы позаботитесь о следующих трех вещах, все будет в порядке.:

  1. Оператор "==" предназначен для проверки математического равенства своих операндов. Для сравнения строк, как и в вашем случае, вам нужно eq.
  2. Строки-константы нужно заключать в кавычки, OTW они рассматриваются как подпрограммы.
  3. Поскольку индексы массива Perl начинаются с нуля, следовательно, $F[8]действительно будет ссылаться на ninthэлемент массива @F.

Основные допущения::

  • Восьмое поле представляет собой полное -сравнение полей, а не частичное. Это означает, что содержимое должно быть именно таким, как вы здесь показываете, а не ошибаться.
  • Нет полей, в которых есть запятые, потому что это разделило бы полузащиту, и подсчет полей пошел бы на жеребьевку.
  • Не то чтобы это имело значение здесь, просто вы знаете, что в идеале окончания строк должны быть окончаниями строк Unix(LF = \n). Если это не так, то вы должны сначала преобразовать их в него.
-6
18.08.2020, 11:21
1 ответ
cmd1 | cmd1 | cmd2

можно заменить на:

cmd1 | cmd2 < <(cmd1)

<(cmd1)изменяет вывод cmd1в дескриптор файла, а предыдущий <передает его в cmd2в канале -аналогичным образом.

Вы не можете просто изменить порядок команд, сохраняя оператор канала (|), потому что он связывает входы и выходы команд, а изменение порядка команд изменяет значение всей команды.

3
18.03.2021, 23:11

Теги

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