Сумма значений с запятой в разных столбцах

myfile="My File [Official Awesome File].txt"
myfile=$(echo $myfile | sed -r 's/(\[|\])/\\\1/g')    
find ./ -name "${myfile}" -type f

Вы можете проверить, работает ли это?

Я ожидаю, что это изменит значение myfile на

myfile="My File \[Official Awesome File\].txt"

Лучше использовать printf :

myfile=$(printf '%q\n' "$myfile")

В вашем конкретном примере в найдите , это будет:

find ./ -name "$(printf '%q\0' "$myfile")" -type f
1
09.09.2018, 23:45
2 ответа

Кроме того, вы можете:

awk -F';' '{ gsub(/,/,".", $0); save=$2-$3; gsub(/\./,",", save) }
           NR>1 && $1{print $1, save, ""}' OFS=';' infile
1;0,2;
4;-0,5;
2;2,55;
  • NR>1пропускает первую строку.
  • Здесь используется сокращение
  • $1от $1 >0.
  • OFS=';'устанавливает O выход F поле S на;
0
28.04.2021, 23:42

Ваш регион мешает. См.https://www.gnu.org/software/gawk/manual/html_node/Locale-influences-conversions.html

Для GNU awk вам необходимо установить переменную среды POSIXLY_CORRECTи переменную среды LS _NUMERIC на локаль, которая использует запятую в качестве десятичного разделителя:

POSIXLY_CORRECT=1 LC_ALL=en_DK.utf-8 gawk -F';' '$1+0 > 0 {print $1 FS $2-$3 FS}' file
1;0,2;
4;-0,5;
2;2,55;

Я также использую $1+0 > 0, чтобы не печатать заголовок. Вы также можете использоватьNR > 1 && $1 > 0


Вы также можете использовать gawk --posixили gawk --use-lc-numericвместо POSIXLY _CORRECT env var.

2
28.04.2021, 23:42

Теги

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