的上三角我試圖打印的矩陣如何打印用awk命令的矩陣
awk '{for (i=1;i<=NF;i++) if (i>=NR) printf $i FS "\n"}' matrix
的上三角形,但輸出被示爲單列
的上三角我試圖打印的矩陣如何打印用awk命令的矩陣
awk '{for (i=1;i<=NF;i++) if (i>=NR) printf $i FS "\n"}' matrix
的上三角形,但輸出被示爲單列
考慮這種樣品基體:
$ cat matrix
1 2 3
4 5 6
7 8 9
要打印的右上三角:
$ awk '{for (i=1;i<=NF;i++) printf "%s%s",(i>=NR)?$i:" ",FS; print""}' matrix
1 2 3
5 6
9
或者:
$ awk '{for (i=1;i<=NF;i++) printf "%2s",(i>=NR)?$i:" "; print""}' matrix
1 2 3
5 6
9
要打印左上角的三角形:
$ awk '{for (i=1;i<=NF+1-NR;i++) printf "%s%s",$i,FS; print""}' matrix
1 2 3
4 5
7
或者:
$ awk '{for (i=1;i<=NF+1-NR;i++) printf "%2s",$i; print""}' matrix
1 2 3
4 5
7
這可能爲你工作(GNU SED):
sed -r ':a;n;H;G;s/\n//;:b;s/^\S+\s*(.*)\n.*/\1/;tb;$!ba' file
將保留空間用作已處理線條的計數器,並且對於每條當前線條將當前線條前面的許多字段刪除。
N.B.計數器在打印當前行後設置,否則第一行將減去第一個字段。
在反射的替代/更好的解決方案是:
sed -r '1!G;h;:a;s/^\S+\s*(.*)\n.*/\1/;ta' file
並打印左上三角形:
sed -r '1!G;h;:a;s/^([^\n]*)\S+[^\n]*(.*)\n.*/\1\2/;ta' file
$ awk '{for (i=NR;i<=NF;i++) printf "%s%s",$i,(i<NF?FS:RS)}' file
1 2 3
5 6
9
爲什麼不使用三元用於第二'%S (也就是說,我認爲這是一個非常重要的問題):{{for(i = 1; i <= NF; i ++)printf「%s%s」,(i