在awk中select行和元素
我了解到,在awk中,$ 2是第二列。 如何在第i行和第j列指定第i行和元素?
要打印第二行:
awk 'FNR == 2 {print}'
打印第二个字段:
awk '{print $2}'
要打印第五行的第三个字段:
awk 'FNR == 5 {print $3}'
编辑 :这是一个标题行和(冗余)字段说明的例子:
awk 'BEGIN {print "Name\t\tAge"} FNR == 5 {print "Name: "$3"\tAge: "$2}'
顺便提一下,有比“\ t \ t”排列更好的方法。
要打印具有特定string的列,可以使用search模式。 例如,如果您正在查找包含abc的第二列:
awk '$2 ~ /abc/'
…如果你只想打印一个特定的列:
awk '$2 ~ /abc/ { print $3 }'
…和特定的行号码:
awk '$2 ~ /abc/ && FNR == 5 { print $3 }'
要扩展Dennis的答案,请使用awk
的-v
选项来传递i
和j
值:
# print the j'th field of the i'th line awk -vi=5 -vj=3 'FNR == i {print $j}'
由于awk和perl密切相关
@ Dennis awk解决scheme的Perl等价物:
要打印第二行:
perl -ne 'print if $. == 2' file
打印第二个字段:
perl -lane 'print $F[1]' file
要打印第五行的第三个字段:
perl -lane 'print $F[2] if $. == 5' file
@ Glenn解决scheme的Perl相当于:
打印第i行的第j个字段
perl -lanse 'print $F[$j-1] if $. == $i' -- -i=5 -j=3 file
@ Hai解决scheme的Perl等价物:
如果您正在查找包含abc的第二列:
perl -lane 'print if $F[1] =~ /abc/' foo
…如果你只想打印一个特定的列:
perl -lane 'print $F[2] if $F[1] =~ /abc/' foo
…和特定的行号码:
perl -lane 'print $F[2] if $F[1] =~ /abc/ && $. == 5' foo
-l
删除换行符,并在打印时将其添加回来
-a
将input行自动插入数组@F
,使用空格作为分隔符
-n
循环input文件的每一行
-e
在引号内执行代码
$F[1]
是数组的第二个元素,因为Perl从0
开始
$.
是行号
我发现这个工作命令
root @ gateway:/ home / sshuser#aws ec2 describe-instances –instance-ids i-2db0459d | grep'STATE \ | TAG'| awk'FNR == 1 {print $ 1}'
州