выбор записи cron с помощью awk или grep

#sed #awk #grep

#sed #awk #grep

Вопрос:

Я хочу обработать файл cron с записью времени и cron в разные столбцы базы данных.

 cat root | awk '{print $1, $2, $3, $4, $5, $6}'

47 * * * * string=`find somefile`; echo $string > success.txt 2> err.txt
  

С помощью awk легко указать первые 5 заполнителей cron. Но как мне выбрать фактическую запись cron?
В приведенном выше примере я хочу выбрать каждую вещь из «string» в «$ string»
Я также хочу выбрать стандартные пути к файлам и исключить ошибки. т.е. success.txt и err.txt

Обновить:

 awk '{print $NF}'
  

Вышеуказанное работает для последней переменной, но следующее не позволяет найти предпоследнюю.

 awk '{print $NF-2}'
  

Комментарии:

1. Привет @shantanuo, тебе понадобится: awk '{ print $(NF-2) }' .

Ответ №1:

Простой способ избавиться от начальных полей — использовать cut :

 cut -d' ' --complement -f1-5
  

Я считаю, что для этого требуется версия cut для GNU, поскольку --complement флаг является расширением.

Я бы использовал awk, чтобы разделить остальные на поля:

 awk '{ 
    outfile=$(NF-2)
    errfile=$NF
    for(n=NF; n>(NF-4); n--) { $n = ""}
    printf("command: %snoutput: %snerror: %sn", $0, outfile, errfile) 
}'
  

Обратите внимание, что этот подход предполагает несколько предположений:

  • пробелы могут быть стандартизированы до отдельных пробелов
  • перенаправляются как stdout, так и stderr
  • в именах выходных файлов и файлов ошибок нет пробелов

Комментарии:

1. Спасибо. Но мне также нужно стандартное имя файла вывода > ‘xxx’ и имя файла вывода ошибки 2> ‘гггг’. Есть ли какой-либо способ найти текст после последних 2> и >?

2. пожалуйста, отредактируйте свой вопрос, чтобы показать точный результат, который вы хотите получить из предоставленного вами ввода. Удачи.