لينكس: GNU فرز لا فرز SEQ
سؤال
العنوان يلخصه.
$ 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
, ، ربما لتوسيع تسلسل الهروب، أو طي كل شيء إلى سطر واحد).
لا تنتمي إلى StackOverflow