Для использования badram опции, Вам нужны исправленное ядро и последний патч, доступный только для 2.6.28.
Я думаю, что Вы используете более свежее ядро без того патча, и это - причина черного экрана.
Необходимо использовать memmap опцию вместо badram.
Вот один способ:
$ paste index.txt data.txt |
awk '{for(i=2;i<=NF;i++){printf "%d\t", $1*$(i)}; print "";}'
1 2 3 4 5
4 6 8 10 12
9 12 15 18 21
16 20 24 28 32
25 30 35 40 45
36 42 48 54 60
49 56 62 70 77
64 72 80 88 96
paste
соединит соответствующие строки файла, поэтому индекс будет $ 1
в скриптлете awk
, который просто просматривает каждое поле и умножает его на текущее значение индекса.
Аналогичный, но немного более идиоматичный подход в Perl:
$ paste index.txt data.txt | perl -lane 'print join "\t",map{$_*$F[0]}@F[1..$#F]'
Вы можете использовать awk
. Прочтите соответствующую строку из index.txt
при чтении data.txt
и умножьте каждое поле на значение, полученное из первого:
awk '{getline f < "index.txt"; for(i=1;i<=NF;i++) {printf("%d\t",$i*f)} printf("\n")}' data.txt
Для вашего ввода будет получено:
1 2 3 4 5
4 6 8 10 12
9 12 15 18 21
16 20 24 28 32
25 30 35 40 45
36 42 48 54 60
49 56 62 70 77
64 72 80 88 96
Попробуйте следующее:
awk 'FNR==NR{a[FNR]=$0;next}
{for(i=1;i<=NF;i++){printf("%d\t",$i*a[FNR])}printf("\n")}' index.txt data.txt
Для index.txt
мы сохраняем значение каждой строки в ассоциативном массиве. Затем при обработке data.txt
мы умножаем значение каждого поля на соответствующее значение в ассоциативном массиве, который равен a [FNR]
.
Он работает аналогично ответу @ devnull, но нам не нужно жестко кодировать имя файла в нашей программе.