Назад | Перейти на главную страницу

bash скрипт - печать из строки N в EOF

Я хочу иметь возможность печатать количество строк из bash как таковое: номер строки (считая сверху) -> конец файла

Кажется, что хвост будет считать только линии снизу.

Кто-нибудь знает как это сделать? Спасибо.

Я пробовал следующее

# Where $1 is the file I'm reading in

# Get line number of error:
LINENUM=$( grep -n "$LAST_ERROR_DATE" $1 | egrep $LOG_THRESHOLD | grep $LAST_HOUR: | sed 's/:/ /g' | awk '{print $1}' | head -n 1 )

echo $LINENUM

# This returns 995

# Print everything from linenumber downwards
MESSAGE=$( awk 'NR >= $LINENUM' $1 )

Это работает, когда я вручную вставляю 995 в awk вместо $ LINENUM, похоже, он не читается в моей переменной bash. Любые идеи?

Использовать tail -n +X filename для печати от X строки до конца файла.

Одинарные кавычки '' означают, «используйте эту точную строку». Они не заменяют имена переменных их значениями. Вот почему вам нужно вручную писать в 995. Это помогает?

Womble's ответ - лучший, но для решения вашей проблемы с переменной в последней строке вы можете использовать функцию передачи переменных в awk:

MESSAGE=$( awk -v linenum=$LINENUM 'NR >= linenum' $1 )

Использовать sed -n 'N,$p' filename для печати с N-й строки до конца файла.

альтернативный:

line=10
file=/path/to/file
sed -n $line,\$p $file