الحفاظ على التنسيق الأصلي POST بالمرور عبر AWK
-
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);