我想读一个数字矩阵
1 3 4 5
2 4 9 0
并且只希望我的awk语句打印出第一个和最后一个,所以1和0.到目前为止,我有这个,但没有任何内容可以打印。我的逻辑出了什么问题?
awk 'BEGIN {for(i=1;i<NF;i++)
if(i==1)printf("%d ", $i);
else if(i==NF && i==NR)printf("%d ", $i);}'
答案 0 :(得分:3)
$ awk '{ if (NR==1) { print $1}} END{print $NF}' matrix
1
0
上面的awk程序有两个部分。第一个是:
{ if (NR==1) { print $1}}
这将打印文件的第一个记录(行)的第一个字段(列)。
第二部分是:
END{print $NF}
此部分仅在读取完最后一条记录(行)后的末尾运行。它打印该行的最后一个字段(列)。
答案 1 :(得分:1)
awk 'NR==1{print $1;} END{print $NF;}'
答案 2 :(得分:1)
借用unix.com,您可以使用以下内容:
awk 'NR == 1 {print $1} END { print $NF }'
这将打印第一行的第一列(NR == 1),结束输入已完成(END),打印最后一行的最后一列。
如果我了解您要查找的输出格式,则此代码应捕获这些值并打印出来:
awk 'NR == 1 {F = $1} END { L = $NF ; printf("%d %d", F, L) }'
答案 3 :(得分:1)
awk是基于行的,NR是当前记录(行)编号。 和awk基本上匹配=&gt;动作,
echo "1 3 4 5
2 4 9 0" |
awk 'NR == 1 {print $1;}
END {print $NF;}'
第一个记录打印第一个字段; 为最后一个记录打印最后一个字段。
答案 4 :(得分:1)
由于awk有这么多解决方案,这是sed的另一种方法。
sed -r ':a;$!{N;ba};s/\s+.*\s+/ /' file
答案 5 :(得分:1)
另一个sed
变体:
$ echo $'1 3 4 5\n2 4 9 0' | sed -n '1s/ .*//p;$s/.* //p'