我瞭解到,在awk中,$ 2是第二列。如何在第i行和第j列指定第i行和元素?在awk中選擇行和元素
回答
要打印的第二行:
awk 'FNR == 2 {print}'
要打印的第二個字段:
awk '{print $2}'
要打印第五行的第三個字段:
awk 'FNR == 5 {print $3}'
編輯 :這是一個帶有標題行和(冗餘)字段說明的示例s:
awk 'BEGIN {print "Name\t\tAge"} FNR == 5 {print "Name: "$3"\tAge: "$2}'
順便提一下,有比「\ t \ t」更好的對齊列的方法。
爲了擴大對丹尼斯的回答,請awk
的-v
選項傳遞i
和j
值:
# print the j'th field of the i'th line
awk -v i=5 -v j=3 'FNR == i {print $j}'
我們可以舉一個使用-v選項的例子嗎? – 2017-01-23 18:28:36
這裏是一個:http://stackoverflow.com/q/9418617/7552 – 2017-01-23 18:41:06
@dessert'j'用值'3'填充,所以當它執行'print $ j'時,它正在執行'print $ 3'正在印刷第三欄,所以它是正確的。 – 2017-12-04 17:02:14
要在指定的字符串打印的列,您可以使用//搜索模式。例如,如果你正在尋找第二列包含ABC:
awk '$2 ~ /abc/'
...如果你只想打印特定列:
awk '$2 ~ /abc/ { print $3 }'
...和特定行number:
awk '$2 ~ /abc/ && FNR == 5 { print $3 }'
感謝您使用「〜」 – 2015-01-27 10:19:33
由於awk和perl密切相關......
的
Perl的當量@丹尼斯的AWK的解決方案:
要打印的第二行:
perl -ne 'print if $. == 2' file
要打印的第二個字段:
perl -lane 'print $F[1]' file
要打印第三字段第五行:
perl -lane 'print $F[2] if $. == 5' file
的Perl相當於格倫的解決方案@:
打印的第j場第i行
perl -lanse 'print $F[$j-1] if $. == $i' -- -i=5 -j=3 file
@海解決方案的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
autosplits輸入線成陣列@F
時,使用空白作爲分隔符
-n
循環輸入文件
-e
的每一行執行引號內的代碼
$F[1]
是所述陣列的所述第二元件,因爲Perl開始於0
$.
是行號
我發現這個工作命令
根@網關:/家庭/ sshuser#AWS EC2描述,實例--instance-IDS I-2db0459d | grep的 'STATE \ | TAG' | awk的 'FNR == 1 {打印$ 1}'
STATE
謝謝! 是否可以使用特定的字符串打印列? – Tim 2009-10-01 23:57:34