Tôi đã học được rằng trong awk, $ 2 là cột thứ hai. Làm thế nào để xác định dòng thứ i và phần tử ở hàng thứ i và cột thứ j?chọn hàng và phần tử trong awk
Trả lời
Để 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".
Để 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ị i
và j
:
# print the j'th field of the i'th line
awk -v i=5 -v j=3 'FNR == i {print $j}'
Có thể chúng ta có ví dụ về khi sử dụng tùy chọn -v sẽ hữu ích không? –
Đây là một: http://stackoverflow.com/q/9418617/7552 –
@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. –
Để 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 }'
Cảm ơn bạn đã sử dụng "~" –
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
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
- 1. : sau và: trước bộ chọn phần tử giả trong Sass
- 2. D3 Chọn phần tử bên trong SVG
- 3. XPATH chọn phần tử gốc
- 4. Chọn phần tử XML trong SQL Server
- 5. selenium webdriver chọn phần tử
- 6. chiều cao tối đa cho phần tử chọn thả xuống (phần tử tùy chọn)
- 7. Chọn một phần tử và anh chị em của nó
- 8. cách chọn phần tử KHÔNG có liên kết bên trong?
- 9. Cách chọn tất cả các phần tử sau phần tử cụ thể trong CSS
- 10. Phần tử 'Chọn' có thể chỉnh sửa
- 11. Chọn các phần tử có id lạ
- 12. Java ArrayList Chọn các phần tử N
- 13. chọn các phần tử bội số của 3 trong phần tử mẹ
- 14. Bộ chọn CSS cho phần tử trong phần tử có kiểu nội tuyến?
- 15. javascript - elementFromPoint chọn phần tử dưới
- 16. jQuery - Tìm phần tử chọn tiếp theo
- 17. Jquery: Chọn phần tử có tên là
- 18. Chọn phần tử dựa trên văn bản
- 19. Phần tử Jquery + hiệu suất chọn lớp
- 20. Lấy phần tử đã chọn từ ListView
- 21. Jquery chọn phần tử tiếp theo
- 22. ASP.Net Html.DropDownList Phần tử đã chọn không được chọn
- 23. SublimeText - Bỏ chọn phần tử được chọn gần đây nhất?
- 24. MongoDB: chọn các phần tử phù hợp của phần phụ
- 25. Nhận số hàng trong p: dataTable của phần tử động
- 26. Tìm một phần tử trong một danh sách các hàng
- 27. jQuery chọn phần tử liền kề
- 28. Lấy loại phần tử được chọn
- 29. đếm số phần tử giữa phần tử "này" và "đó"
- 30. jQuery chọn các phần tử tùy chọn theo giá trị
Cảm ơn! Có thể in các cột bằng một chuỗi cụ thể không? – Tim