#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