Вы, вероятно, ищете редактирование на месте для изменения того же файла, который указан в дубликате.Ваша попытка никогда не сработает, 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 .