Прочитать строку BASH (вывести $строку и строку ниже)

Он предназначен для обработки недопустимых опций. В примере, если вы запустите script -a, ожидается опция -aи результат «-aбыл запущен!». Если вы запустите script -b, -bнедопустимо и будет обработано случаем \?, что приведет к «Недопустимой опции :-b».

1
20.10.2019, 13:41
1 ответ

Проблема с вашим решением заключается в том, что вы вызываете grepдля каждой строки. На самом деле, grep также анализирует каждую строку. Таким образом, для файла с n строками эти строки анализируются n^2 раз, а загрузка grep— довольно затратный вызов.

Используйте однострочный буфер -, в этом примере называемый PrevLine, например:

#!/bin/bash
CurLine=''
isFirstLine=true
while IFS='' read -r LineBelow; do
  if $isFirstLine; then
    echo "This is the first line, so no previous."
  else
    echo "Current line read: ${CurLine}"
    echo "Line below: ${LineBelow}"
  fi
  CurLine="${LineBelow}"
  isFirstLine=false
done <"$1"

На самом деле присвоение trueк isFirstLine— это присваивание строки, а простое упоминание$isFirstLine(в условии if -)— это выполнение команды этой строки. Поскольку trueи falseявляются встроенными в bash -, их можно использовать напрямую без существенного влияния на скорость, но с большим увеличением читабельности.

В последней строке упоминается $1как имя входного файла, поэтому вызовите с помощью:

./test.sh inputfile.txt
0
27.01.2020, 23:59

Теги

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