Как распечатать требуемый абзац из текстового файла в оболочке unix

#shell #unix

#оболочка #unix

Вопрос:

Мне нужно распечатать требуемый абзац из текстового файла, имеющего N количество абзацев.

Мой скрипт выдает требуемый результат, но все же я хотел бы знать более эффективный и простой код для достижения этой цели,

 awk 'match($0,/ /){print NR;}' para.txt  > temp
para=$1
Para_start=`sed -n ${para}p temp`;
next_para=`expr ${para}   1`;
Next_para_start=`sed -n ${next_para}p temp`;
Para_end=`expr ${Next_para_start} - 1`;
sed -n ${Para_start},${Para_end}p para.txt
  

В начале каждого абзаца есть пробел табуляции.
Приведенный выше скрипт должен выполняться как «para.sh 3».

Комментарии:

1. Укажите какие-либо входные и выходные данные?

Ответ №1:

Вся логика может быть легко преобразована в один Awk-скрипт.

 awk -v p="$1" 'BEGIN { r=1 }
    /^t / {   i }
    i>p { exit r }
    i==p { print; r=0 }'  para.txt
  

Мы увеличиваем i , когда видим разделитель. Если мы дошли до нужного абзаца, мы закончили (код выхода указывает, было ли что-нибудь на самом деле напечатано). Если это нужный абзац, выведите текущую строку.

Ответ №2:

Используя gnu-awk эту единственную команду awk:

 awk 'NR==3' RS='n[[:blank:]] ' file