сохранение вывода awk в исходный файл

Обязательно отключите устаревший режим или хотя бы установите приоритет для режима uefi в конфигурации «биос». На USB-накопителе должна быть папка efi. Таблица разделов не имеет значения, Windows требуется gpt для загрузки в режиме efi, linux может загружаться в режиме efi из таблицы разделов mbr или gpt. Файловая система диска должна быть фат32. Вы также можете проверить, установлены ли на разделе флаги bootи esp.

0
14.05.2021, 12:22
2 ответа

Если вы используете GNU awk:

gawk -i inplace '...' filename      # NOT redirected

Если вы устанавливаете пакет moreutils

awk '...' filename | sponge filename

Использовать временный файл (перезаписывать оригинал только в случае успешного завершения процесса awk)

t=$(mktemp)
awk '...' filename >"$t" && mv "$t" filename

НО, здесь вам не нужны отдельные grep и awk:

awk -F, -v pattern="foobar" '
    $0 ~ pattern {
        printf "%-5s %-10s\n", $1, $3
    }
' $oldfile > $savelocation1/$newfile1

5
28.07.2021, 11:32

Поскольку вы используете awk, вам не нужен grep.

oldfile=test.csv
read -p "Enter File location: " savelocation1
read -p "Enter File name: " newfile1

awk -F, '/foobar/ {printf "%-5s %-10s\n", $1, $3}' "$oldfile" > "$savelocation1/$newfile1"

Кстати, я рекомендую изменить ваш скрипт так, чтобы он принимал оба аргумента (или даже только ОДИН аргумент, новое имя файла )из командной строки. Это сделает тестирование и отладку ваших скриптов намного намного проще, поскольку вы можете использовать функции вызова истории bash для ввода одного и того же каталога и имени файла без необходимости вводить их каждый раз снова.

напр.

# accept directory and filename from command line args
# very primitive.  use getopts to do this properly.
[ -n "$1" ] && d="$1"
[ -n "$2" ] && f="$2"

# if not provided on the command line, ask for them
[ -z "$d" ] && read -p "Enter output file location: " d
[ -z "$f" ] && read -p "Enter output file name: " f

oldfile=test.csv
awk -F, '/foobar/ {printf "%-5s %-10s\n", $1, $3}' "$oldfile" > "$d/$f"

, тогда вы можете запустить его как:

./myscript.sh somedir somefile.csv
2
28.07.2021, 11:32

Теги

Похожие вопросы