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ı comm
veriyor . Yani ondalık olmayan sayılarla uğraşıyoruz.
Kısa cevap:
-n
Anahtarın, sort
sağlanan sonuçları sıralamak için kullanılan komutla kullanımına bağlı olarak, comm
döndürülen sonuçların sıralaması comm
çok farklı olabilir:
Sözlük : -n
Anahtarı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 switch
ile sort
. komutun yürütüldüğü ana bilgisayarda ayarlanma LC_COLLATE
şekline göre bile değişebilen sıralamayı belirler locale
. Bu giriş comm
varsayılan olarak beklenir. Hakkında biraz daha fazla bilgiyi LC_COLLATE
burada 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 switch
sort
Eğer Ancak yok "in sonucu lexographic " amacıyla, daha sonra do DEĞİL kullanmak -n
için sağlanan verileri sıralarken anahtarı comm
karşılaştırma için.
TEST YAPMAK:
comm
Komutun sonuçlarını -n
anahtarla 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 comm
olmadan 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ı comm
olmadan -n
anahtarı 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-order
anahtarını kullanın . Sayıların her dosyada sıralanmadığını bildiğimiz için, tarafından döndürülen sonuçlar comm -n
doğ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
, -n
anahtarı kullanılarak döndürülen sonuçların comm
yanlış olduğu anlamına gelmez . Gerçekten, kullanarak comm -n
sı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.