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