Скрипт для получения строки, сравнения вывода из массива и проверки их равенства

Это похоже на задание для Brace Expansion, плюс немного eval над строковыми манипуляциями:

MyVariable=$(eval "printf '%s' /path/to/files{${Start:0:2}..${Stop:0:2}}\;")

Затем вы можете избавиться от последнего двоеточия semi -с помощью${MyVariable%;}

В приведенном выше примере я предполагаю, что ваши ${Start}и ${Stop}действительно всегда являются как минимум 3-значным числом, иначе вам нужно будет настроить манипуляции со строками.

0
24.01.2021, 17:52
2 ответа

Ваш скрипт не использует синтаксис sh. Во всяком случае, это больше похоже на смесь синтаксиса ksh и zsh. Для базовой проверки синтаксиса вы можете использовать shellcheck (, доступную онлайн, или отдельную утилиту, которую вы можете установить в своей системе ).

Но в любом случае для обработки текста не следует использовать циклы оболочки .

Вы бы предпочли использовать инструмент для обработки текста. Здесь для текста, отформатированного в полях с фиксированным разделителем, очевидным будетawk:

#! /usr/bin/sh -
input=test.txt
awk -F: '
  second_pass {if (count[$2] > 1) print $1; next}
              {count[$2]++}' "$input" second_pass=1 "$input"
2
18.03.2021, 22:34

Понятно, так что мое новое дополнение:

awk -F: 'second_pass {if (count[$2] > 1) print NR-1 "," $1; next} {count[$2]++}' "$input" second_pass=1 "$input"

Это работает! Ваше здоровье!!

0
18.03.2021, 22:34

Теги

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