GÜNCEL YANIT:
SORUN:
OP, metin değil dosyalardaki pozitif tamsayıları karşılaştırmak için kullanılırken " dosya sıralı değil " hatası commveriyor . Yani ondalık olmayan sayılarla uğraşıyoruz.
Kısa cevap:
-nAnahtarın, sortsağlanan sonuçları sıralamak için kullanılan komutla kullanımına bağlı olarak, commdöndürülen sonuçların sıralaması commçok farklı olabilir:
Sözlük : -nAnahtarın sıralama ile kullanılması, bir dizi artan sayıdaki "pozitif Tamsayılar" ın sipariş edilmesine neden olacaktır. " Hata " comm`s anahtarı kullanılarak bastırılabilir--nocheck-order
Bayt Sırası : Orada NO kullanımı -n switchile sort. komutun yürütüldüğü ana bilgisayarda ayarlanma LC_COLLATEşekline göre bile değişebilen sıralamayı belirler locale. Bu giriş commvarsayılan olarak beklenir. Hakkında biraz daha fazla bilgiyi LC_COLLATEburada bulabilirsiniz: Reference1 ve Reference2
Hata bir sorun mu var?
Bu neyi başarmaya çalıştığınıza bağlıdır. Aşağıdaki örneklerde göreceğiniz gibicomm, dosyaları``switch'' ile veya``switch'' olmadan karşılaştırdıktan sonra,komutlabirlikte kullanılıp kullanılmadığınabağlı olarak yukarıdaki şekilde değişsede aynı sonuçları döndürür. Ben, bir dizide artan "sözlükbilimsel" sıralı sonuç- tercih ederim.sort-n-n switchsort
Eğer Ancak yok "in sonucu lexographic " amacıyla, daha sonra do DEĞİL kullanmak -niçin sağlanan verileri sıralarken anahtarı commkarşılaştırma için.
TEST YAPMAK:
commKomutun sonuçlarını -nanahtarla ve anahtarsız karşılaştırırız. Kusalananda'nın isteği doğrultusunda numune test veri setimin karmaşıklığını arttırdım:
Test Verileri :
dosya1.txt :
40
110000
2200
6
33000
file2.txt :
2200
40
33000
6
440000
Kavşak :
Yalnızca BOTH dosyalarında ortak olan sayıları listele
Anahtarsız -n:
comm -12 <(sort file1.txt) <(sort file2.txt)
2200
33000
40
6
Sonuçlar : Doğru, ancak sıralanmamış bir sırayla döndürüldü
İLE -n Anahtarı:
comm -12 <(sort -n file1.txt) <(sort -n file2.txt)
6
40
2200
33000
comm: file 1 is not in sorted order
Sonuçlar : Doğru, ancak LEXOGRAPHIC sıralama düzeninde döndürüldü . İşlem başarıyla tamamlandı ve anahtar commolmadan kullanmakla aynı sonuçları döndürdü -n, ancak sıralı bir listede.
Fark :
Yalnızca her dosyaya özgü numaraları listeleyin:
Anahtarsız -n:
comm -3 <(sort file1.txt) <(sort file2.txt)
110000
440000
Sonuçlar : Doğru - bu sayılar gerçekten ilgili dosyalara özeldir.
İLE -n Anahtarı:
comm -3 <(sort -n file1.txt) <(sort -n file2.txt)
110000
comm: file 1 is not in sorted order
440000
Bulgular : olarak doğru, aynı sonuçları commolmadan -nanahtarı karşın bunun dönüşü dosyalar kendileri sıralanır olmamak pozitif tamsayılar sırasına hakkında hatasını.
SÖZLÜK SONUÇLARI İÇİN ÇÖZÜM:
Hata mesajını bastırmak için comm`s --nocheck-orderanahtarını kullanın . Sayıların her dosyada sıralanmadığını bildiğimiz için, tarafından döndürülen sonuçlar comm -ndoğrudur, hata bastırılarak güvenle göz ardı edilebilir:
Kavşak :
comm -12 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)
6
40
2200
33000
Fark :
comm -3 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)
110000
440000
SONUÇ:
Beslenen pozitif tamsayıların sıralanması döndürüldüğünde " dosya sıralı değil " hatası comm, -nanahtarı kullanılarak döndürülen sonuçların commyanlış olduğu anlamına gelmez . Gerçekten, kullanarak comm -nsıralanmış düzende düzenli bir düzeltme döndürür!
@Dhag sayesinde, @kusalananda @ChrisDown, daha fazla genişletme gerektiren sorunları dile getirdiği için. İşlerimin gözden geçirilmesinden her zaman mutlu oluruz: Daha iyi olmamızın tek yolu, sürekli olarak meslektaşlarımız tarafından zorlanıp zorlanmamızdır.