# 🎯 دستورات پیشرفته `sort` در لینوکس
### مرتبسازیهای هوشمند، ترکیبی، و ستونی برای کاربران حرفهای لینوکس
---
## 🔹 ۱. مرتبسازی چند سطحی (چند کلیدی)
فرض کن فایل زیر رو داریم:
```
ali 20
zahra 18
ali 15
reza 19
```
مرتبسازی ابتدا بر اساس نام، سپس بر اساس سن (عدد):
```bash
sort -k1,1 -k2,2n file.txt
```
- `-k1,1`: مرتبسازی بر اساس ستون اول (اسم)
- `-k2,2n`: مرتبسازی عددی ستون دوم (سن)
---
## 🔹 ۲. مرتبسازی فایل CSV (با جداکننده کاما)
مثال فایل `data.csv`:
```
name,score
ali,85
zahra,90
reza,75
```
مرتبسازی عددی بر اساس ستون دوم:
```bash
sort -t',' -k2,2n data.csv
```
- `-t','`: مشخصکردن جداکننده (در اینجا کاما)
---
## 🔹 ۳. مرتبسازی با حذف خطوط تکراری (`-u`)
```bash
sort -u file.txt
```
> اول مرتبسازی میکنه، بعد خطوط تکراری رو حذف میکنه.
توجه: برای حذف دقیقتر بهتره با `uniq` ترکیب بشه.
---
## 🔹 ۴. مرتبسازی حساس به locale (برای زبان فارسی یا دیگر زبانها)
```bash
LC_ALL=C sort file.txt
```
یا:
```bash
LC_COLLATE=C sort file.txt
```
> مفید برای مرتبسازی استاندارد (مثل A-Z بدون درهمریختگی حروف خاص)
---
## 🔹 ۵. مرتبسازی به همراه نمایش شماره خط اصلی
```bash
nl file.txt | sort -k2
```
> برای مرتبسازی بدون از بین بردن موقعیت اولیه در فایل اصلی
---
## 🔹 ۶. مرتبسازی بر اساس کاراکتر خاص در ستون
فرض کن فایل اینطوریه:
```
ali:20
reza:18
zahra:25
```
مرتبسازی بر اساس عدد:
```bash
sort -t':' -k2,2n file.txt
```
---
## 🔹 ۷. استفاده از sort در اسکریپت با فایلهای بزرگ
```bash
sort -T /tmp -k2,2n bigfile.txt
```
> `-T /tmp` مشخص میکنه که فایلهای موقتی مرتبسازی در `/tmp` ساخته بشن؛ مفید برای فایلهای حجیم.
---
## 🔹 ۸. ذخیره فایل مرتبشده در همان فایل (با `-o`)
```bash
sort file.txt -o file.txt
```
> بدون نیاز به `> newfile.txt`، خروجی رو مستقیماً در همون فایل مینویسه.
---
## 💡 نکات نهایی برای مرتبسازیهای حرفهای:
| دستور | کاربرد |
|--------|--------|
| `-kX,Y` | مرتبسازی از ستون X تا Y |
| `-tSEP` | تعیین جداکننده دلخواه (مثل `:`, `,`, `|`) |
| `-n` | مرتبسازی عددی |
| `-r` | ترتیب معکوس |
| `-u` | حذف تکراریها |
| `-o` | نوشتن خروجی روی همان فایل |
---
## ✅ مثال ترکیبی پیشرفته:
مرتبسازی یک فایل CSV بر اساس ستون دوم عددی، بهصورت معکوس، ذخیره روی خودش:
```bash
sort -t',' -k2,2nr scores.csv -o scores.csv
```