دستور sort ( مرتب کردن خطوط یک فایل )

تمام دستوراتی که با حرف S شروع میشوند در این انجمن قرار دارند
ارسال پست
نمایه کاربر
phoenix
مدیر کل سایت
مدیر کل سایت
پست در این موضوع: 1
پست: 153
تاریخ عضویت: شنبه 29 مهر 1396, 11:10 am
محل اقامت: مشهد
نسخه فدورا: 28
نوع دستکتاپ: Xfce
تماس:

دستور sort ( مرتب کردن خطوط یک فایل )

پست توسط phoenix » جمعه 29 دی 1396, 12:09 pm

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

کد: انتخاب همه

sort [option] filename
نکته: همانطور که در صفحه man sort نیز ذکر شده است برای اجرای صحیح دستور sort باید ابتدا دستور زیر انجام شود.

کد: انتخاب همه

export LC_ALL=C
فایل با محتویات زیر را در نظر بگیرید:

کد: انتخاب همه

-> $cat letters.txt 
b
D
c
A
C
B
d
a
پس از اجرای دستور sort خروجی زیر بر روی صفحه نمایش ظاهر میشود.

کد: انتخاب همه

-> $sort letters.txt 
A
B
C
D
a
b
c
d
  • سوئیچ r- : این سوئیچ نتایج جستجو را معکوس میکند.
مثال:

کد: انتخاب همه

-> $sort -r letters.txt 
d
c
b
a
D
C
B
A
  • سوئیچ f- : این سوئیچ بزرگی و کوچکی حروف را مد نظر قرا نمیدهد.

کد: انتخاب همه

-> $sort -f letters.txt 
A
a
B
b
C
c
D
d
  • سوئیچ n- : فایل با محتویات زیر را در نظر بگیرید:

کد: انتخاب همه

-> $cat number.txt 
5
4
12
1
3
56
در صورتیکه از دستور sort بدون هیچ آرگومانی استفاده کنیم نتیجه بصورت زیر خواهد بود:

کد: انتخاب همه

-> $sort number.txt 
1
12
3
4
5
56
که نتیجه مطلوبی نیست برای مرتب سازی طبق مقدار اعداد میتوان از سوئیچ n- استفاده کرده

کد: انتخاب همه

-> $sort -n number.txt 
1
3
4
5
12
56
  • سوئیچ b- : این سوئیچ فضای خالی ابتدای خط را نادیده میگرد و مرتب سازی را بدون در نظر گرفتن آنها انجام میدهد.
  • سوئیچ u- : این سوئیچ خطوط تکراری را حذف و تنها یکبار نمایش میدهد.
مثال:

کد: انتخاب همه

-> $cat blank_letters.txt 
b
D
C
c
A
C
C
B
d
a
a
حالا استفاده از دستور sort با آرگومانهای بالا

کد: انتخاب همه

$sort -u blank_letters.txt 

A
B
C
D
a
b
c
d
  • سوئیچ k- : در صورتیکه متن مورد نظر از چندین ستون تشکیل شده باشد میتوان از این سوئیچ برای مرتب کردن متن براساس یک ستون خاص استفاده کرد بطور پیش فرض تفکیک هر ستون از ستون دیگر با استفاده از فاصله انجام میشود(تعداد فاصله های در نظر گرفته نمیشود)
مثال:

کد: انتخاب همه

$ls -lah|sort -k8
total 148K
drwxrwxrwt.  2 root    root      40 Jan 19 10:02 .Test-unix
-r--r--r--.  1 root    root      11 Jan 19 10:02 .X0-lock
drwxrwxrwt.  2 root    root      60 Jan 19 10:02 .X11-unix
drwxrwxrwt.  2 root    root      40 Jan 19 10:02 .XIM-unix
drwxrwxrwt.  2 root    root      40 Jan 19 10:02 .font-unix
drwx------.  3 root    root      60 Jan 19 10:02 systemd-private-0406c7408759407aa6b6dc08142aa812-chronyd.service-xmqWzH
drwx------.  3 root    root      60 Jan 19 10:02 systemd-private-0406c7408759407aa6b6dc08142aa812-colord.service-Pvk6Zb
drwx------.  3 root    root      60 Jan 19 10:02 systemd-private-0406c7408759407aa6b6dc08142aa812-rtkit-daemon.service-rPz0Ag
drwxrwxrwt.  2 root    root      60 Jan 19 10:05 .ICE-unix
drwx------.  2 phoenix phoenix   60 Jan 19 10:05 .esd-1000
-rw-------.  1 phoenix phoenix  398 Jan 19 10:05 .xfsm-ICE-L7WGDZ
drwxrwxr-x.  2 phoenix phoenix   80 Jan 19 10:05 anydesk
-rw-------.  1 phoenix phoenix  579 Jan 19 10:05 dropbox-antifreeze-A22JqO
srwxrwxr-x.  1 phoenix phoenix    0 Jan 19 10:05 e088685723136bc304e1ab17d2bbcfe0-{87A94AB0-E370-4cde-98D3-ACC110C5967D}
drwx------.  2 phoenix phoenix   60 Jan 19 10:05 ssh-TQgC41EpOaU3
-rw-rw-r--.  1 phoenix phoenix  12K Jan 19 10:05 tmpl6l53ffp
drwx------.  2 phoenix phoenix   60 Jan 19 10:22 thunderbird_phoenix
-rw-rw-r--.  1 phoenix phoenix  41K Jan 19 11:47 Screenshot_2018-01-19_11-46-46.png
-rw-rw-r--.  1 phoenix phoenix  59K Jan 19 11:47 Screenshot_2018-01-19_11-47-35.png
-rw-rw-r--.  1 phoenix phoenix   16 Jan 19 12:07 letters.txt
-rw-rw-r--.  1 phoenix phoenix   14 Jan 19 12:16 number.txt
-rw-rw-r--.  1 phoenix phoenix   23 Jan 19 12:23 blank_letters.txt
dr-xr-xr-x. 18 root    root    4.0K Nov 27 12:33 ..
drwx------.  2 phoenix phoenix   60 Jan 19 15:12 mozilla_phoenix0
-rw-------.  1 phoenix phoenix  829 Jan 19 17:10 ERKDDZ.tmp
drwx------.  2 phoenix phoenix   60 Jan 19 17:27 firefox_phoenix
drwxrwxrwt. 16 root    root     540 Jan 19 20:45 .
در این مثال خروجی دستور ls براساس ستون هشتم خروجی مرتب شده است.
  • سوئیچ t- : در حالت قبل و زمانیکه از سوئیچ k به تنهایی مورد استفاده قرار میگرفت تفکیک ستون ها بوسیله فاصله ای که بین آنها وجود داشت انجام میگرفت ولی با استفاده از سوئیچ t میتوان از هر نوع کاراکتری برای تفکیک کردن ستون های یک متن استفاده کرد.
مثال:

کد: انتخاب همه

$cat /etc/passwd |head|sort -t: -k4 -n
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
در این مثال ستون های متن با استفاده از کاراکتر : از هم تفکیک شده اند و مرتب سازی طبق مقدار اعداد ستون چهارم متن انجام شده است
 ! پیام از: phoenix
برای توضیحات تکمیلی در ارتباط با دستورهای cat - ls - head میتوانید بر روی هر دستور کلیک تا به صفحه همان دستور ارجاع داده شوید
تصویر برای ادامه کار و بالا رفتن کیفیت آموزش ها نیاز به حمایت مالی شما داریم پس لطفا از ما حمایت کنید
از اونجایی که برای جمع آوری و ترجمه و تالیف یک پست آموزشی زمان و زحمت زیادی صرف شده است.
لطفاً در صورت استفاده از این مطلب در سایت یا مقاله و ..... حتما با ذکر منبع و لینک برگشتی باشد.

مسلما این حمایت شما دوستان موجب پایداری اینگونه اثرها خواهد بود سربلند و پیروز باشین

ارسال پست