awk -F '|' '$1 ~ /smiths/ {sum += $3} END {print sum}' inputfilename
- Các
-F
lá cờ đặt tách lĩnh vực; Tôi đặt nó trong dấu ngoặc đơn vì nó là một ký tự vỏ đặc biệt.
- Sau đó, chỉ
$1 ~ /smiths/
áp dụng {mã khối} sau cho các dòng có trường đầu tiên khớp với biểu thức chính quy /smiths/
.
- Phần còn lại giống như mã của bạn.
Lưu ý rằng vì bạn không thực sự sử dụng regex ở đây, chỉ là một giá trị cụ thể, bạn có thể dễ dàng sử dụng:
awk -F '|' '$1 == "smiths" {sum += $3} END {print sum}' inputfilename
Mà kiểm tra bình đẳng chuỗi. Điều này tương đương với việc sử dụng regex /^smiths$/
, như đã đề cập trong một câu trả lời khác, bao gồm ^
neo để chỉ khớp với phần bắt đầu của chuỗi (bắt đầu của trường 1) và phần $
neo để chỉ khớp với phần cuối của chuỗi. Không chắc bạn quen thuộc với regexes như thế nào. Chúng rất mạnh, nhưng trong trường hợp này, bạn có thể sử dụng kiểm tra tính bằng chuỗi một cách dễ dàng.