Tại sao awk in toàn bộ dòng khi tôi muốn nó in một biến?


24

Khi tôi gõ:

echo "foo bar" | gawk -v var="content" '{print $var}'

Tôi hy vọng đầu ra sẽ được content. Tại sao vậy foo bar?


8
Hãy thử xóa $khỏi $ var
Taliezin

Thật. Tôi đã nhầm lẫn với cú pháp bash ...
nicoco

Đó là một câu hỏi hay và mặc dù câu trả lời cho thấy rằng $đã bị đặt sai chỗ, tôi không chắc nó nên được đóng lại như lỗi đánh máy. Gần đây tôi đã thấy một vài trong số này vì vậy có lẽ chúng ta cần một thứ kinh điển
roaima

Câu trả lời:


45

Các biến được tham chiếu theo tên như trong var, không phải $vartrong awk. $nđề cập đến nthứ lĩnh vực : $1cho trường đầu tiên, $2cho phần thứ hai ... hoặc toàn bộ đăng ký cuối cùng n== 0 ( $0có đầy đủ các hồ sơ).

Những người không phải là số theo nghĩa đen. Bạn có thể sử dụng $(1+1)hoặc $variable. Nếu variablechứa 1, thì $variablesẽ là trường đầu tiên. Một trường thường được sử dụng là $NFcho trường cuối cùng ( NFlà biến đặc biệt có chứa số lượng trường).

Nếu, như trong ví dụ của bạn, biến không chứa số, số không đó được hiểu là 0.

Vì vậy var="content"; print $var, giống như var=0; print $var, và do đó, giống như print $0, đó là in toàn bộ hồ sơ.

Những gì bạn muốn ở đây là:

echo "foo bar" | gawk -v var="content" '{print var}'
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.