onefish
onechicken
twofish
twochicken
twocows
threechicken
Nếu tôi muốn grep cho các dòng có chứa "hai", nhưng tôi chỉ muốn kết hợp thứ hai. Vì vậy, tôi muốn kết quả "twochicken".Chỉ hiển thị kết quả phù hợp thứ hai của grep
onefish
onechicken
twofish
twochicken
twocows
threechicken
Nếu tôi muốn grep cho các dòng có chứa "hai", nhưng tôi chỉ muốn kết hợp thứ hai. Vì vậy, tôi muốn kết quả "twochicken".Chỉ hiển thị kết quả phù hợp thứ hai của grep
thử điều này:
awk '/two/{i++}i==2' file
với dữ liệu của bạn:
kent$ echo "onefish
onechicken
twofish
twochicken
twocows
threechicken"|awk '/two/{i++}i==2'
twochicken
lưu ý: nếu file của bạn là rất lớn, làm điều này:
awk '/two/{i++}i==2{print; exit}' file
grep -m2 "two" in-file.txt | tail -n1
Dừng sau trận đấu thứ hai, sau đó in dòng thứ hai.
Nếu từ (ở đây word == hai) lặp lại nhiều lần trong một dòng, & bạn muốn prin t dòng đó, sử dụng bên dưới:
word=two
n=2
line=`grep -m$n $word -o -n MyFile | sed -n $n's/:.*//p'`
awk 'FNR=='$line'{print; exit}' MyFile
ví dụ: Đối dưới đầu vào:
onefish
onechicken
twotwofish
twochicken
twocows
threechicken
nó sẽ in twotwofish
, thay vì twochicken
.
Đây có thể không phải là những gì user1787038 muốn, nhưng được thêm vào để trả lời nhận xét của riêng tôi.
'-m $ n' trong dòng grep chỉ dành cho một số tối ưu hóa, không cần thiết cho chức năng. – anishsane
Cần lưu ý rằng nếu threechicken
và twocows
dòng được hoán đổi, hay còn gọi là:
onefish
onechicken
twofish
twochicken
threechicken
twocows
sau đó phản ứng đầu tiên của Kent (awk '/two/{i++}i==2' file
) sẽ mang lại kết quả:
twochicken
threechicken
vì phải mất một sự xuất hiện của trận đấu để tăng bộ đếm. Phản hồi cuối cùng của anh ta: awk '/two/{i++}i==2{print; exit}' file
tránh sự cố này.
tùy chọn thứ hai là cấp trên bất kể tệp được kích hoạt, phải không? – poncha
@poncha, số dòng – Kent
ý của bạn là gì theo 'số dòng'? tôi có nghĩa là thêm '{print; exit} 'sẽ là ý tưởng tốt cho bất kỳ kích thước đầu vào nào ... oh. đó là lựa chọn # 3 thực sự;) tôi đếm sai))) – poncha