Điểm mấu chốt ở đây là ký tự ống (|
) phải được đặt vào vỏ. Sử dụng "\|
" hoặc "'|'
" để bảo vệ nó khỏi sự can thiệp của vỏ và cho phép nó được chuyển đến awk
trên dòng lệnh.
Đọc các ý kiến tôi thấy rằng các poster ban đầu trình bày một phiên bản đơn giản của vấn đề ban đầu liên quan đến lọc file
trước khi lựa chọn và in ấn các lĩnh vực. Một đường chuyền qua grep
đã được sử dụng và kết quả được đưa vào hoạt động để lựa chọn trường. Đó là tài khoản hoàn toàn không cần thiết cat file
xuất hiện trong câu hỏi (nó thay thế grep <pattern> file
).
Tốt, điều đó sẽ hiệu quả. Tuy nhiên, awk phần lớn là một công cụ phù hợp với mô hình của riêng nó, và có thể được tin cậy để tìm và làm việc trên các dòng phù hợp mà không cần phải gọi grep
. Sử dụng một cái gì đó như:
awk -F\| '/<pattern>/{print $2;}{next;}' file
Bit /<pattern>/
nói awk
để thực hiện các hành động mà sau trên dây chuyền phù hợp với <pattern>
.
Mất tìm kiếm {next;}
là hành động mặc định bỏ qua dòng tiếp theo trong đầu vào. Nó không có vẻ là cần thiết, nhưng tôi có thói quen này từ lâu ...
Lưu ý rằng mấu chốt của vấn đề là ký tự ống, không phải lệnh được sử dụng. Nhưng đây là một giải pháp tốt. –
Tôi nghĩ về nó, nhưng tôi muốn có một câu trả lời giải thích vấn đề. Đó là kinda điểm của bình luận của tôi, trên thực tế. ;-) –
Sẽ là 'cut -d' | ' -f FIELDNUMBER FILENAME' – Andrea