Прочитанных строк, начиная с номера строки в bash-скрипт
Я пытаюсь прочитать файл строка за строкой, начиная с определенной строки в bash. Я уже использовал команду while для чтения каждой строки файла, увеличивая количество. Могу ли я начать с определенной строки?
let count=0
declare -a ARRAY
while read LINE; do
ARRAY[$count]=$LINE
vech=${ARRAY[$count]}
if [...blah ..]
then
...blah..
fi
sleep 2
((count++))
done < filec.c
любая помощь в виде предложений или алгоритмов приветствуется.
Edit: я пытаюсь передать номер строки в качестве переменной . Я Grepping для определенного шаблона, и если он найден, должен передать номер строки, начиная по образцу.
5 ответов
Я хотел бы использовать sed
' s адреса чтобы начать с определенного номера строки и распечатать в конце файла:
lineNumber=10
sed -n "$lineNumber"',$p' |
while read line; do
# do stuff
done
либо это, либо, как предложил Фредрик, использовать awk
:
lineNumber=10
awk "NR > $lineNumber" |
while read line; do
# do stuff
done
Как насчет чего-то подобного?
while read -r line
do
echo "$line"
done < <(tail -n +number file.name)
он не совместим с POSIX, но попробуйте свой Bash. Конечно, делайте то, что вы хотите с $line внутри цикла while.
PS: изменить номер с yhe номер строки вы хотите и файл.имя с именем файла.
некоторые из многих способов:http://mywiki.wooledge.org/BashFAQ/011
лично:
printf '%s\n' {1..6} | { mapfile -ts 3 x; declare -p x; }
кроме того, не используйте имена переменных all-caps.
просто держите счетчик. Чтобы напечатать все строки после определенной строки, вы можете сделать следующее:
#!/bin/bash
cnt=0
while read LINE
do
if [ "$cnt" -gt 5 ];
then
echo $LINE
fi
cnt=$((cnt+1))
done < lines.txt
или, почему бы не использовать на awk:
awk 'NR>5' lines.txt
просто прочитайте определенное количество строк до нужного числа и начните свою логику, чтобы прочитать остальное.
невозможно сэкономить на "текстовом" файле, вы не можете пропустить строки, не прочитав их. Линии разделены 0x0a и переменной длины. Поэтому каждый разделитель должен быть отсканирован и подсчитан, чтобы достичь определенного "номера строки". Есть уловки, которые позволяют думать, что ты их не читал, но ты читал.