#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. пожалуйста, отредактируйте свой вопрос, чтобы показать точный результат, который вы хотите получить из предоставленного вами ввода. Удачи.