ทำไม awk พิมพ์ทั้งบรรทัดเมื่อฉันต้องการให้พิมพ์ตัวแปร


24

เมื่อฉันพิมพ์:

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

contentผมคาดว่าการส่งออกจะเป็น ทำไมfoo barล่ะ


8
ลองลบ$จาก $ var
taliezin

จริง ผมสับสนกับไวยากรณ์ทุบตี ...
nicoco

มันเป็นคำถามที่ดีและถึงแม้ว่าคำตอบจะแสดงว่า$มันหายไปฉันไม่แน่ใจว่าควรจะปิดเหมือนการพิมพ์ผิด ฉันได้เห็นสิ่งเหล่านี้หลายครั้งเมื่อเร็ว ๆ นี้ดังนั้นบางทีเราอาจจำเป็นต้องมีแบบบัญญัติ
roaima

คำตอบ:


45

ตัวแปรที่มีการอ้างอิงโดยใช้ชื่อในขณะที่varไม่ได้อยู่ใน$var อ้างถึงฟิลด์th : สำหรับฟิลด์แรกสำหรับวินาที ... หรือทั้งเรคคอร์ดสำหรับ== 0 ( เป็นเรคคอร์ดเต็ม)awk$nn $1$2n$0

สิ่งเหล่านั้นไม่จำเป็นต้องเป็นตัวเลขที่แท้จริง คุณสามารถใช้หรือ$(1+1) $variableหากvariableมี1แล้ว$variableจะเป็นเขตข้อมูลแรก หนึ่งที่ใช้กันทั่วไป$NFสำหรับฟิลด์สุดท้าย ( NFเป็นตัวแปรพิเศษที่มีจำนวนของฟิลด์)

ถ้าเช่นเดียวกับในตัวอย่างของคุณตัวแปรไม่มีตัวเลขนั่นคือเข้าใจว่าไม่ใช่ตัวเลขเป็น 0

ดังนั้นvar="content"; print $varเป็นเช่นเดียวกับvar=0; print $varและเช่นเดียวกับprint $0ที่พิมพ์บันทึกทั้งหมด

สิ่งที่คุณต้องการคือ:

echo "foo bar" | gawk -v var="content" '{print var}'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.