Bash - 仅使用awk打印矩阵的某些部分

时间:2014-03-24 00:00:05

标签: bash awk sed

我想读一个数字矩阵

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);}'

6 个答案:

答案 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'