awk, чтобы обновить существующий файл - PullRequest
0 голосов
/ 19 июня 2019

Как ответ на этот вопрос - grep и awk, объединить команды?

Использование такой команды, как

awk '/^-/{ print $9 }' file > outputfile

Как я могу получить файл awk и перенаправить вывод на то же имя файла?

Я пытался

awk '/^-/ {print $9}' outfile.log >outfile.log

.. но полученный файл outfile.log пуст.

1 Ответ

3 голосов
/ 19 июня 2019

Вы, вероятно, ищете редактирование на месте для изменения того же файла, который указан в дубликате.Ваша попытка никогда не сработает, awk .. file > file, потому что оболочка обрабатывает перенаправления даже перед выполнением фактической команды, поэтому > file фактически обрезает файл из-за пустого перенаправления.Таким образом, awk никогда не сможет увидеть значение $9 в файле.

Возможно, вам нужен mktemp, который создает произвольную строку имени файла под временным путем в вашей файловой системе.Вы можете перенаправить вывод команды в такой файл и переместить его обратно в исходный файл

awk '/^-/ {print $9}' outfile.log >tmpfile && mv tmpfile outfile.log

Использование mktemp разрешит потенциальную перезапись / удаление файла, если у вас есть имя файла tmpfileв вашем текущем каталоге.

tmpfile="$(mktemp)"
awk '/^-/ {print $9}' outfile.log > "$tmpfile" && mv "$tmpfile" outfile.log

Если вы используете GNU awk, вы можете написать

gawk -i inplace '...' file

Это описано в руководстве gawk .

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