Я хочу иметь возможность печатать количество строк из 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