У вас есть несколько незначительных проблем с кодом.
Попробуйте это:
#!/bin/bash
function addition_example(){
local num1=$1
local num2=$2
local result=$((num1+num2))
echo "Addition of the supplied arguments = $result"
}
addition_example "$1" "$2"
=
при назначении переменной с помощью bash echo
должен быть заключен в кавычки, любая переменная должна быть заключена в кавычки. Правильная идея -неправильная реализация
вам нужно сохранить значения поля в массиве, проиндексированном по полю позиции . Поэтому вместо a[$i]
сделайте этоa[i]=$i
, то вам нужно искать значения по индексу в массиве. Так что не $i="a"
, а$i=a[i]
Кстати, $i == "\."
не является проверкой регулярного выражения, поэтому вам не нужно экранировать.
$ awk -F'|' 'BEGIN{OFS=FS} NR==1 {for(i=1;i<=NF;i++) a[i]=$i } NR>1 {for(i in a) if( $i == "." ) $i=a[i]}1' file
A|N|G|O|T|T|T|P|G|C|Q|A|R|A|S|G|U|V|T|T
A|C|G|A|T|T|T|P|G|C|Q|A|R|A|C|R|C|V|T|T
A|N|G|O|N|T|T|T|N|C|Q|A|C|A|S|R|U|V|T|T
Как указал Эд Мортон , вы можете улучшить решение, заменив явный цикл с помощью встроенной awk -в split
функции:
awk -F'|' 'BEGIN{OFS=FS} NR==1 {split($0,a)} NR>1 {for(i in a) if( $i == "." ) $i=a[i]}1'