ошибка bash tail: невозможно открыть ввод при использовании опции -c - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь определить, где обрезать бревно, чтобы уменьшить его размер.Журнал был запущен в 2010 году и к нему добавлялись сценарии, которые с тех пор выполняются ежедневно.Я опускаю каждую строку в журнале, чтобы вытащить строки с датами в них, а затем хочу взять последние 4 символа этих строк, поскольку они представляют год.Затем я могу определить, в какой строке, например, впервые появляется 2018 год, и обрезать файл выше этого.

Я пытаюсь использовать tail -c 4, чтобы получить последние 4 символа каждой строки, но япродолжаю получать сообщение об ошибке «не могу открыть ввод» из tail.

код:

#!/bin/bash

date=$(grep ' EST ' input.log)

IFS=$'\n'

for line in $date
do
   printf "%s\n" "$line" > output.tmp
   chmod 777 output.tmp
   echo $(tail -c 4 output.tmp)
done

Когда я запускаю этот код только с «tail output.tmp», без опций, он работает как положенои выводит полную строку, которая в настоящее время повторяется.

Но когда я пытаюсь использовать tail -c 4, я получаю ошибку «tail: not open input».

Я проверил страницу man для tail, и опция -cдоступно, так что я делаю не так?Или есть лучший способ приблизиться к этому, кроме использования хвоста?(У меня нет опции grep -o в моей системе).

1 Ответ

2 голосов
/ 05 апреля 2019

Вам не нужен временный файл:

#!/bin/bash

date=$(grep ' EST ' input.log)

IFS=$'\n'

for line in $date
do
   echo ${line: -4}
done
...