我用AWK命令打印對角線打印對角線的矩陣
awk '{ for (i=1; i<=NF; i++) if (NR >= 1 && NR == i) print $(i - 0) }' matrix
和輸出是像:
1
2
3
4
怎麼能顯示這樣的:
1
2
3
4
矩陣:
1 0 3 5
0 2 6 7
3 0 3 5
8 7 2 4
我用AWK命令打印對角線打印對角線的矩陣
awk '{ for (i=1; i<=NF; i++) if (NR >= 1 && NR == i) print $(i - 0) }' matrix
和輸出是像:
1
2
3
4
怎麼能顯示這樣的:
1
2
3
4
矩陣:
1 0 3 5
0 2 6 7
3 0 3 5
8 7 2 4
這可能會做:
awk '{for (i=1;i<=NF;i++) if (NR>=1 && NR==i) {for (j=1;j<=i-1;j++) printf " ";print $(i-0)}}' matrix
1
2
3
4
只添加行前面i-1
數量的空間。
或者您可以使用計數器來確保其獨立於行號和選項卡。
awk '{for (i=1;i<=NF;i++) if (NR>=1 && NR==i) {c++;for (j=1;j<=c-1;j++) printf "\t";print $(i-0)}}' matrix
1
2
3
4
Jotne,我們如何通過sed命令來做到這一點 – abinasunny
@abinasunny'sed'更多的是單線工具。這可能是一個解決方案,但爲什麼不堅持使用'awk'。據我所見,如果你有'sed',你也有'awk' – Jotne
這可能爲你工作(GNU SED):
sed -r '1!G;h;:a;s/^(\s*)\S+\s*(.*)\n.*/ \1\2/;ta;s/^(\s*\S+).*/\1/' file
它使用保留空間來計算行數,因此該領域的矩陣中的位置。
單個空間用於替換在顯示的字段前移除的字段,以及在顯示的字段被移除後到達的字段。
要使用標籤使用替換空格分隔符:
sed -r '1!G;h;:a;s/^(\s*)\S+\s*(.*)\n.*/\t\1\2/;ta;s/^(\s*\S+).*/\1/' file
有了這個INFILE ...
1 0 3 5
0 2 6 7
3 0 3 5
8 7 2 4
...這AWK ...
awk '{for (j=1;j<=NF;j++) if (j!=NR) $j=""; print}' $InFile >$OutFile
...產生了這個O utFile ...
1
2
3
4
如果你想最大限度地減少擊鍵該作品一樣好......
awk '{for (j=1;j<=NF;j++) j!=NR?$j="":1}1' $InFile >$OutFile
丹尼爾B.馬丁
一些快捷方式(我把一個輸出字符串(%s)更加詳盡,但(%d)足以用於$ i打印且不需要更換每個元素的內容
awk '{ printf("%" (i++ * 2) "s%s\n", "", $i)}' YourFile
您忘記了打印'empty'元素打印之前添加'; else if(i
NeronLeVelu