我在awk中了解到,这$2
是第二列。如何指定第i行和第i行第j列的元素?
Answers:
要打印第二行:
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”更好的对齐列的方法。
exit
如果没有理由处理整个文件,请使用,在打印完所需记录后立即停止:
awk 'FNR == 2 {print; exit}'
由于awk和perl密切相关...
@Dennis的awk解决方案的Perl等效项:
要打印第二行:
perl -ne 'print if $. == 2' file
要打印第二个字段:
perl -lane 'print $F[1]' file
要打印第五行的第三个字段:
perl -lane 'print $F[2] if $. == 5' file
Perl相当于@Glenn解决方案:
打印第i行的第j个字段
perl -lanse 'print $F[$j-1] if $. == $i' -- -i=5 -j=3 file
@Hai解决方案的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
时将输入行自动拆分为array时添加换行符,@F
使用空格作为
-n
输入文件每一行的定界符循环
-e
执行引号内的代码
$F[1]
是数组的第二个元素,因为Perl从0
$.
该行开始数