كيف يمكنني طباعة حقل من ملف مفصولة الأنابيب؟

StackOverflow https://stackoverflow.com/questions/213855

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي ملف مع حقول مفصولة الأحرف الأنابيب وأريد لطباعة فقط الحقل الثاني. فشلت هذه المحاولة:

$ cat file | awk -F| '{print $2}'
awk: syntax error near line 1
awk: bailing out near line 1
bash: {print $2}: command not found

هل هناك طريقة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

والنقطة الأساسية هنا هي أن الطابع الأنابيب (|) يجب أن هرب إلى قذيفة. استخدام "\|" أو "'|'" لحمايتها من قذيفة interpertation والسماح لها لتمريرها إلى awk على سطر الأوامر.


وقراءة التعليقات أرى أن الملصق الأصلي يقدم نسخة مبسطة من المشكلة الأصلية التي شملت تصفية file قبل اختيار وطباعة المجالات. تم استخدام التمريرات من خلال grep والأنابيب النتيجة في AWK لاختيار المجال. أن يفسر cat file لا لزوم لها بالكامل التي تظهر في السؤال (فإنه يستبدل grep <pattern> file).

والجميلة، التي ستعمل. ومع ذلك، AWK هو إلى حد كبير نمط أداة من تلقاء نفسها مطابقة، ويمكن الوثوق بها لإيجاد والعمل على خطوط مطابقة دون الحاجة إلى استدعاء grep. استخدام شيء مثل:

awk -F\| '/<pattern>/{print $2;}{next;}' file

وبت /<pattern>/ يروي awk لتنفيذ الإجراء الذي يتبع في الخطوط التي تطابق <pattern>.

وو{next;} تبحث خسر هو الإجراء الافتراضي تخطي إلى السطر التالي في المدخلات. لا يبدو ضروريا، ولكن لدي هذه العادة من منذ فترة طويلة ...

نصائح أخرى

وأو مجرد استخدام أمر واحد:

cut -d '|' -f FIELDNUMBER

والحرف الأنابيب يحتاج إلى أن هرب بحيث قذيفة لا يفسر ذلك. وهناك حل بسيط:

$ awk -F\| '{print $2}' file

وخيار آخر سيكون على حد تعبير الحرف:

$ awk -F'|' '{print $2}' file

و'الملف' لا يحتوي على حرف الأنابيب، لذلك فإنه يطبع شيء. يجب عليك إما استخدام "ملف القط أو ببساطة إدراج الملف بعد برنامج AWK.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top