دوشنبه، دی ۱۷، ۱۳۸۶

از بین بردن نیولاین از انتهای یک متغیر

اگر فایلی داشته باشید که در هر سطر آن یک مقدار ذخیره شده باشد، با حلقه‌ی for زیر می‌توان هر سطر را خواند، اما این مشکل وجود دارد که متغیر line یک کاراکتر نیولاین در انتها خواهد داشت که برای ما نامطلوب است.

Initial Wrong Script
  1:   #! /bin/bash
  2:   
  3:   for line in `cat input.txt`; do
  4:       echo "<tag>${line}</tag>"
  5:   done

برای رفع این مشکل می‌توان یا از هر متغیر نیولاین را حذف کرد:

Removing new-line from variable
  1:   #! /bin/bash
  2:   
  3:   for line in `cat input.txt`; do
  4:       line=`echo $line | awk '{ str1=str1 $0 }END{ print str1 }'`
  5:       echo "<tag>${line}</tag>"
  6:   done

یا از فایل اولیه یک فایل جدید ساخت که در آن به جای نیولاین از فاصله استفاده شده باشد. یعنی کل فایل اولیه تبدیل شود به یک فایل یک خطی که در آن مقادیر تنها با کاراکتر فاصله از هم جدا شده باشند:

Replacing new-line with space in a new file
  1:   #! /bin/bash
  2:   
  3:   for line in `cat input.txt | awk '{ str1=str1 $0 " " }END{ print str1 }'`; do
  4:       echo "<tag>${line}</tag>"
  5:   done

به تفاوت در پارامترهای awk در دو روش فوق توجه کنید.

0 نظر:

ارسال یک نظر

جهت نمایش صحیح آدرس سایتتان، حتما قبل از آدرس //:http را درج کنید.