Как продублировать матрицу с помощью awk? - PullRequest
1 голос
/ 04 января 2012

У меня есть следующая матрица 4 x 3 с полями, разделенными пробелом.

Введите

12.34 34.3 2.34
1.23 45.78 79.56
1.45 78.5 23.50
78.45 23.33 45.8

Как дублировать эту матрицу n раз, в этом случае 2 раза, используя awk или sed?

Желаемый вывод

12.34 34.3 2.34
1.23 45.78 79.56
1.45 78.5 23.50
78.45 23.33 45.8
12.34 34.3 2.34
1.23 45.78 79.56
1.45 78.5 23.50
78.45 23.33 45.8

Спасибо за вашу помощь.

Tony

Ответы [ 6 ]

4 голосов
/ 04 января 2012
awk '1' ./infile ./infile

sed -n 'p' ./infile ./infile

cat ./infile ./infile
3 голосов
/ 04 января 2012

Я думаю, вам нужно предоставить больше контекста;в какой форме находится исходная матрица и что вы хотели бы с ней сделать?Кроме этого, используйте:

$ cat matrix
12.34 34.3 2.34
1.23 45.78 79.56
1.45 78.5 23.50
78.45 23.33 45.8

$ cat matrix matrix 
12.34 34.3 2.34
1.23 45.78 79.56
1.45 78.5 23.50
78.45 23.33 45.8
12.34 34.3 2.34
1.23 45.78 79.56
1.45 78.5 23.50
78.45 23.33 45.8
1 голос
/ 04 января 2012

Это может работать для вас:

sed ':a;N;$!ba;:b;p;x;s/^/x/;/x\{2\}/d;x;bb' matrix.txt

Где /x\{2\}/ действует как счетчик, т. Е. Повторение 12 раз меняется на /x\{12\}/

1 голос
/ 04 января 2012
$ for i in {1..2}; do cat matrix.txt; done
$ sed -n 'H; ${g;s/.*/&&/p}' matrix.txt

Чтобы дублировать эту матрицу 10 раза, просто измените 2 (&&) на 10 (&&&&&&&&&&)

1 голос
/ 04 января 2012

Самый простой способ, если матрица находится в файле matrix.txt с cat:

cat matrix.txt matrix.txt

Вы можете добиться практически того же эффекта с помощью sed:

sed 's/^//' matrix.txt matrix.txt

Не так много других способов сделать это легко с sed. Вы также можете потянуть тот же трюк с awk:

awk '{print $0}' matrix.txt matrix.txt

Есть также хитрая стенография:

awk 1 matrix.txt matrix.txt

( Подсказка : действие по умолчанию print $0.)

Используя awk, вы также можете организовать чтение файла только один раз:

awk '{line[NR] = $0}
     END { for (j = 1; j <= 2; j++) { for (i = 1; i <= NR; i++) print line[i] } }' \
    matrix.txt

Это компромисс между пространством и временем; awk интернализует копию файла и дважды ее регургитирует;

1 голос
/ 04 января 2012

Чтобы повторить это N раз, вы можете использовать:

perl -ne '{$x.=$_}END{print $x x N}' file

В вашем случае замените N на 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...