2012-01-04 57 views
1

我有以下由空格分隔的字段的4 x 3矩陣。如何用awk複製矩陣?

輸入

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次使用awksed

所需的輸出

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 

感謝您的幫助。

託尼

回答

4
awk '1' ./infile ./infile 

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

cat ./infile ./infile 
3

我認爲你需要提供一些更多的上下文;原始矩陣的形式是什麼,你想用它做什麼?除此之外,使用方法:

$ 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

重複了N次,你可以使用:

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

在你的情況與2更換N

1

如果矩陣是在文件matrix.txt最簡單的方法是用cat:不是有很多其他的方式

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

cat matrix.txt matrix.txt 

你基本上可以實現與sed同樣的效果用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
$ for i in {1..2}; do cat matrix.txt; done 
$ sed -n 'H; ${g;s/.*/&&/p}' matrix.txt 

要複製這個矩陣10次,只是改變2&&)到10&&&&&&&&&&

+0

sed解決方案在模式空間開始處爲您提供額外的換行符('H'追加換行符,然後將PS追加到保存空間)'sed -n'H; $ {g; s /.*/ &&/; s /.//p}'matrix.txt'修復了它。 – potong

1

這可能會爲你工作:

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

凡​​充當計數器即重複12次更改爲/x\{12\}/