
[code]

    1 2 3
    4 5 6
    7 8 9
    
[/code]

というデータ(`aa.txt`とします)があった時、  
awkだけを使うという制約のもと、  
斜めに1,5,9(または3,5,7)を取得するにはどうすればいいでしょうか？  
私は

[code]

    awk 'NR==i{print $i}' aa.txt
    
[/code]

をループすればできると思ったのですが、うまくできませんでした


CC BY-SA 4.0
2016-10-20T14:39:57.463
29746
2019-12-06T21:18:43.457
2019-12-06T21:18:43.457
32986
19249
question
awk
awk で斜めだけを取得するには？

[code]

     awk '{print $NR}' aa.txt
     awk '{print $(NF-NR+1)}' aa.txt
    
[/code]

* * *

`NR`は処理している行の先頭からの番号(上から何行目か)が代入されている組み込みの変数です。

`NF`は処理している行のフィールド数(列の数)が代入されている組み込みの変数です。

`$`はフィールドを参照する演算子で、よく`$1`(=1列目)とか`$2`(=2列目)というふうに使われますが、`$(式)`という形で数字だけでなく式を与えることもできます。(※ひとつ目のコードは`()`を省略しています)


CC BY-SA 3.0
2016-10-20T15:06:24.190
29747
2016-10-20T16:41:23.393
2016-10-20T16:41:23.393
9575
9575
29746
answer


`$NR` ...terrible

[code]

    awk '{(i=NR%NF)? 0:i=NF; print $i;}' aa.txt
    awk '{(i=NR%NF)? i=NF-i+1:i=1; print $i;}' aa.txt 
    
[/code]


CC BY-SA 4.0
2019-12-06T21:15:19.050
61186
2019-12-06T21:15:19.050
36960
29746
answer