2012-12-27 16 views
5

Tôi có một file văn bản như thế này:awk: tìm và thay thế trong lĩnh vực nhất định chỉ

$ cat test 
12 13 2100 s 
12 13 3100 s 
100 13 100 s 
12 13 300 s 

Tôi muốn đầu ra là như thế này:

$ cat test 
12 13 22000 s 
12 13 32000 s 
100 13 2000 s 
12 13 300 s 

Tôi chỉ muốn thay thế 100 trong trường 3 (một lần 100 được chứa trong $3) vào 2000. Làm cách nào để hoàn thành công việc này bằng cách sử dụng awk?

Trả lời

8

Dưới đây là một trong những cách sử dụng awk:

awk '{ sub(/100$/, "2000", $3) }1' file 

Kết quả:

12 13 22000 s 
12 13 32000 s 
100 13 2000 s 
12 13 300 s 
+0

Làm thế nào tôi có thể thay thế tất cả những gì không phải là 100 với phép nói 5000 ? – discipulus

+1

@lovedynasty: Bạn có thể thử một cái gì đó như: 'awk' {sub (/ [^ 1] * [^ 0] * [^ 0] * /, "5000", $ 3)} 1 'tệp'. Nhưng điều đó có thể không cung cấp cho bạn kết quả mong đợi. Thông thường khi tôi muốn thực hiện một số loại kết hợp mẫu nghịch đảo, tôi sẽ muốn sử dụng một số loại [xác nhận xung quanh] (http://www.regular-expressions.info/lookaround.html). Thật không may, 'awk' không hỗ trợ những điều này và tôi sẽ cần sử dụng một công cụ mạnh mẽ hơn. Thay vào đó, tôi sẽ sử dụng chế độ 'perl' trong' tự động tách '. HTH. – Steve

1
awk '$3~/100/{gsub(/100/,"2000",$3)}1' your_file 
+0

xin lỗi, tôi đã không mô tả vấn đề đúng cách, tôi đã cập nhật vấn đề của mình. –

+0

Làm thế nào tôi có thể thay thế tất cả mọi thứ không phải là 100 với cho phép nói 5000? – discipulus

1

Hãy thử:

awk '{$3=gensub(100,2000,1,$3);print}' test.txt 
Các vấn đề liên quan