سؤال

العنوان يلخصه.

$ echo `seq 0 10` `seq 5 15` | sort -n
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15

لماذا لا يعمل هذا؟

حتى لو كنت لا تستخدم seq:

echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' | sort -n
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15

وحتى الخندق echo مباشرة:

$ echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' > numbers
$ sort -n numbers 
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15
هل كانت مفيدة؟

المحلول

sort(1) فرز خطوط. وبعد يجب أن تحليل بيانات محددة من Whitespace بنفسك:

echo `seq 0 10` `seq 5 15` | tr " " "\n" | sort -n

نصائح أخرى

لأنك تحتاج إلى خطوط نيو هناك sort:

$ echo `seq 0 10` `seq 5 15` | tr " " "\\n" | sort -n | tr "\\n" " "; echo ""
0 1 2 3 4 5 5 6 6 7 7 8 8 9 9 10 10 11 12 13 14 15
$

لديك سطر واحد من المدخلات. لا يوجد شيء للفرز.

الأمر كما كتبته ينتج عنه تسلسل الأرقام التي تم تمريرها إلى sort في سطر واحد. هذا ليس ما تريد. مجرد تمرير إخراج seq مباشرة الى sort:

(seq 0 10; seq 5 15) | sort -n

بالمناسبة، كما اكتشفت للتو، البنية

echo `command`

لا مستخدم افعل ما تتوقعه وهو أمر زائد لما تتوقعه بالفعل: إنه يروي القشرة لالتقاط إخراج command ونقلها إلى echo, ، والتي تنتجها كمخرجات مرة أخرى. فقط دع إنتاج الأمر تمر مباشرة (إلا إذا كنت هل حقا يعني أن يكون معالجتها echo, ، ربما لتوسيع تسلسل الهروب، أو طي كل شيء إلى سطر واحد).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top