У меня есть массив bash, например
myarray = (1 2 3 4 5 ... n)
Также я читаю файл с вводом только одной строки, например:
1 2 3 4 5 ... n
Я читаю его построчно в массив и печатаю его с помощью:
awk 'BEGIN{FS=OFS="\t"}
NR>=1{for (i=1;i<=NF;i++) a[i]+=$i}
END{for (i=1;i<NF;i++) print OFS a[i]}' myfile.txt
myarray
имеет тот же размер, что и a
. Теперь myarray
начинается с индекса 0
, а a
с индексом 1
. Однако моя главная проблема заключается в том, как я могу передать массив bash своему выражению awk, чтобы я мог использовать его внутри цикла печати с соответствующими элементами. Итак, что я пробовал, было это:
awk -v array="${myarray[*]}"
'BEGIN{FS=OFS="\t"}
NR>=1{for (i=1;i<=NF;i++) a[i]+=$i}
END{for (i=1;i<NF;i++) print OFS a[i] OFS array[i-1]}' myfile.txt
Однако это не работает. Я не получаю никакого вывода для myarray
. Мой желаемый результат в этом примере:
1 1
2 2
3 3
4 4
5 5
...
n n
OFS="\t\t"
. Потому что иногда мне нужно два из них, чтобы правильно выровнять числа. 16.06.2015echo "1 2 3" | awk 'BEGIN {OFS="\t\t"} {print $1, $2}'
. 16.06.2015BEGIN{FS="\t"; OFS="\t\t"}
. Или дажеFS="\t"; OFS=FS FS
!! (это меня удивило) 16.06.2015