یک روش زمخت(بلکه غیر سریع)این است:
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"
پرسش و پاسخ 11 (آخرین ویرایش 2012-02-27 02:27:07 توسط ormaaj)