پرسش و پاسخ شماره ۱۱ - آموزش اسکریپت نویسی
X
تبلیغات
پخش زنده جام جهانی

آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

#!/bin/bash

پرسش و پاسخ شماره ۱۱



پرسش و پاسخ شماره ۱۱

چگونه می‌توانم سطر شماره n از یک فایل را چاپ کنم؟

یک روش زمخت(بلکه غیر سریع)این است:

    sed -n ${n}p "$file"

اما حتی اگر فقط سطر سوم را خواسته باشید، این تمام فایل را می‌خواند، که برای اجتناب از آن می‌توان، جهت چاپ سطر ‎ $n‎ ازفرمان "p" استفاده کنیم و به دنبال آن "q" را برای خروج از اسکریپت به کار ببریم:

    sed -n "$n{p;q;}" "$file"

یک شیوه دیگر، ربودن آخرین سطر از یک لیست n سطری است:

   head -n $n $file | tail -n 1

راهکار دیگر، به کار بردن AWK است:

   awk "NR==$n{print;exit}" file

اگر بیش از یک سطر لازم باشد، وفق دادن هر یک از روشهای قبل آسان است:

   x=3 y=4
   sed -n "$x,${y}p;${y}q;" "$file"
                             #   چاپ می‌کند و خارج می‌شود $y تا$x سطرهای 
   head -n $y "$file" | tail -n $((y - x + 1))             #   همانطور‎
   head -n $y "$file" | tail -n +$x     # پشتیبانی کند tail اگر برنامه 
   awk "NR>=$x{print} NR==$y{exit}" "$file"            #  به همان طریق

در Bash نگارش 4، با استفاده از دستور داخلی mapfile یک راهکار فشرده مختص-bashمی‌تواند حاصل شود. با همراه کردن شناسه با گزینه ‎ -n ‎ این فرمان، بیش از یک سطر می‌تواند در آرایه MAPFILE خوانده شود:

   mapfile -ts $((n-1)) -n 1 < "$file"
   echo "${MAPFILE[0]}"

همچنین mapfile می‌تواند به طور مشابهی با head به کار برود، در صورتیکه از مسائل میانگیری لوله بودن ورودی اجتناب می‌شود:

   { mapfile -n $n; head -n 1; } <"$file"

See Also


CategoryShell

پرسش و پاسخ 11 (آخرین ویرایش ‎ 2012-02-27 02:27:07 ‎ توسط ormaaj)