Trích xuất các mẫu từ các tập tin


0

Tôi đang cố gắng trích xuất các mẫu từ cat ing một tệp trong tập lệnh bash. Tôi cần trích xuất 10 và 80 theo từng dòng. Làm thế nào để tôi làm điều này?

Total Branch Predictor Mispredictions: 10
Total Branch Predictor OK predictions: 80

Câu trả lời:


4
$ cat > data
Total Branch Predictor Mispredictions: 10
Total Branch Predictor OK predictions: 80
$ cat data | awk '{print $NF}'
10
80
$ cat data | awk '{printf "%s ",$NF}'
10 80 $ awk '{printf "%s ",$NF}' < data
10 80 $

awkkhông chỉ biết $1, $2vv để giải quyết cột thứ n , mà còn $NFđể giải quyết cột cuối cùng (trong trường hợp này, 1080). Lệnh thứ hai sử dụng printfthay vì printnhổ mọi thứ trong một dòng (quan sát dòng mới bị thiếu ở cuối). Lệnh thứ ba tránh sử dụng cat.

Ngoài ra còn có một giải pháp liên quan đến sed:

$ sed 's/^[^:]*: \([0-9]*\)/\1 /' < data
10
80

Và người ta chỉ liên quan đến bash:

$ while read line; do printf "%s " "${line##*: }"; done < data; echo
10 80 
$ 

trong đó đọc từng dòng tệp, xử lý linebiến bằng cách xóa mẫu khớp lớn nhất từ ​​bên trái (trong trường hợp này: mọi thứ lên đến :) và chuyển nó sang printf, sau đó tiến hành định dạng nó. Tôi đã thêm echovào cuối để có một dòng mới cuối cùng :)


Tôi nghĩ rằng OP có nghĩa là anh ta muốn xem dữ liệu hiệu suất tương quan trong một dòng, như 10 80(mặc dù rất khó để hướng dẫn ai đó khi anh ta không chỉ định, nơi anh ta muốn nhận)
ppeterka

trong trường hợp này, sử dụng cat data | awk '{printf "%s ",$NF}'.
Claudius

và, để tránh việc sử dụng mèo vô dụng, hãy thử $ awk '{printf "%s ",$NF}' < data(mặc dù OP đã nói rõ ràng về mèo ).
Claudius

Tôi nghĩ bạn nên thêm các bit này vào câu trả lời, nó sẽ hữu ích cho cư dân Siêu người dùng trong tương lai ...
ppeterka
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.