我有一个像这样的文件
1 3 4 5
2 5 0 9
3 4 6 6
0 1 0 1
我想让它从右到左打印出对角线......
5 0 4 0
到目前为止,我有这个,但它只打印出最后一栏。
#!/bin/bash
awk '{c=NF}{printf "%d ", $c}{c-=1}'
答案 0 :(得分:1)
你很亲密:
echo "1 3 4 5
2 5 0 9
3 4 6 6
0 1 0 1" | awk 'BEGIN{c=4}{printf("%d ", $c);c-=1}'
您必须将c=NF
部分放在BEGIN
"部分"中。但是,NF
尚未定义。
因此,如果您的尺寸不固定,您可以使用NR
:
echo "1 3 4 5
2 5 0 9
3 4 6 6
0 1 0 1" | awk '{printf("%d ", $(NF-NR+1))}'
答案 1 :(得分:0)
awk '{printf(" %d", $NR)} END{print ""}'
打印与记录编号对应的列;最后,打印换行符。如果你不想要领先的空间:
awk '{printf("%s%d", pad, $NR); pad=" "} END{print ""}'
awk '{if (NF >= NR) printf(" %d", $(NF - NR + 1))} END{print ""}'
awk '{if (NF >= NR) printf("%s%d", pad, $(NF - NR + 1)); pad=" "} END{print ""}'
请注意,没有一个程序能够特别巧妙地处理格式错误的数组。