2009-10-01 35 views

Trả lời

104

Để in dòng thứ hai:

awk 'FNR == 2 {print}' 

Để in trường thứ hai:

awk '{print $2}' 

Để in lĩnh vực thứ ba của dòng thứ năm:

awk 'FNR == 5 {print $3}' 

Sửa : Dưới đây là ví dụ với dòng tiêu đề và mô tả trường (dự phòng) s:

awk 'BEGIN {print "Name\t\tAge"} FNR == 5 {print "Name: "$3"\tAge: "$2}' 

Có những cách tốt hơn để căn chỉnh cột hơn "\ t \ t".

+0

Cảm ơn! Có thể in các cột bằng một chuỗi cụ thể không? – Tim

21

Để mở rộng về câu trả lời của Dennis, sử dụng awk 's -v tùy chọn để vượt qua những giá trị ij:

# print the j'th field of the i'th line 
awk -v i=5 -v j=3 'FNR == i {print $j}' 
+0

Có thể chúng ta có ví dụ về khi sử dụng tùy chọn -v sẽ hữu ích không? –

+1

Đây là một: http://stackoverflow.com/q/9418617/7552 –

+1

@dessert 'j' được điền bằng giá trị' 3', vì vậy khi nó in '$ j', nó đang thực hiện' in $ 3' đang in cột thứ ba, vì vậy nó là chính xác như nó đứng. –

25

Để in các cột với một chuỗi cụ thể, bạn sử dụng // mẫu tìm kiếm. Ví dụ, nếu bạn đang tìm kiếm cho các cột thứ hai có chứa abc:

awk '$2 ~ /abc/' 

... và nếu bạn muốn in chỉ một cột cụ thể:

awk '$2 ~ /abc/ { print $3 }' 

... và cho một dòng cụ thể số:

awk '$2 ~ /abc/ && FNR == 5 { print $3 }' 
+0

Cảm ơn bạn đã sử dụng "~" –

0

Vì awk và perl có liên quan chặt chẽ ...


Perl tương đương của @ giải pháp awk Dennis:

Để in dòng thứ hai:
perl -ne 'print if $. == 2' file

Để in trường thứ hai:
perl -lane 'print $F[1]' file

Để in lĩnh vực thứ ba của dòng thứ năm:
perl -lane 'print $F[2] if $. == 5' file


Perl tương đương với @ giải pháp của Glenn:

In lĩnh vực j'th của i'th dòng

perl -lanse 'print $F[$j-1] if $. == $i' -- -i=5 -j=3 file


Perl tương đương của @ giải pháp Hải:

nếu bạn đang tìm kiếm các cột thứ hai chứa abc:

perl -lane 'print if $F[1] =~ /abc/' foo

... và nếu bạn muốn in chỉ một cột cụ thể:

perl -lane 'print $F[2] if $F[1] =~ /abc/' foo

... và đối với một số dòng cụ thể:

perl -lane 'print $F[2] if $F[1] =~ /abc/ && $. == 5' foo


-l loại bỏ dòng mới, và thêm chúng trở lại trong khi in
-a autosplits dòng đầu vào mảng @F, sử dụng khoảng trắng như delimiter
-n lặp trên mỗi dòng của tập tin đầu vào
-e thực thi mã trong dấu ngoặc kép
$F[1] là yếu tố thứ hai của mảng, vì Perl giá khởi điểm 0
$. là số dòng

0

tôi thấy lệnh làm việc này

root @ cổng:/home/sshuser # AWS EC2 mô tả-trường --instance-id i-2db0459d | grep 'NHÀ NƯỚC \ | TAG' | awk 'FNR == 1 {print $ 1}'

NHÀ NƯỚC

Các vấn đề liên quan