الحفاظ على التنسيق الأصلي POST بالمرور عبر AWK

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

  •  03-07-2019
  •  | 
  •  

سؤال

لدي مشكلة في استخدام AWK لإزالة حقل من الدفق، كما هو موضح أدناه:

  1 int blah (void)
  2 {
  3         if (foo) {
  4                 printf ("blah\n");
  5         }       
  6         return 0;
  7 }  

أستخدم الكود التالي لإزالة الحقل الأول:

$ أوك '{ $1="";طباعة }' example.out

 int blah (void)
 {
 if (foo) {
 printf ("blah\n");
 }
 return 0;
 }

لماذا هذا هو الحال؟هل هذا لأن AWK يزيل كل المسافات البيضاء - هل يمكن منع ذلك؟

أطيب التحيات مقدما

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

المحلول

http://awk.freeshell.org/RangeOfFields

يحتوي على وصف لكيفية القيام بذلك.ويرتبط أيضا http://student.northpark.edu/pemente/awk/awktail.txt والذي يحتوي على 3 حلول للمشكلة.بقدر ما أعرف، إذا قمت بتعيين حقل، فسيتم استخدام فاصل حقل الإخراج لتسلسل جميع الحقول معًا.لذا " "+ فجأة انهار إلى مساحة واحدة.تعامل مع الأمر بحذر، فأنا لست خبيرًا.على سبيل المثال، حاول التعيين : إلى المتغير OFS, ، وستؤدي النقطتان بدلاً من المسافات إلى ظهور بين الحقول في الإخراج:

echo a b c | awk 'BEGIN{ OFS = ":" } { $1=""; print }'
$ :b:c

إذا كنت تستخدم زawk، فيمكنك استخدامه gensub الامتداد الذي أجده مستقيماً جدًا للاستخدام:

print gensub($1 "[\t ]*(.*)", "\\1", 1); 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top