JAWABAN TERBARU:
MASALAH:
OP menerima kesalahan tentang " file tidak dalam urutan " ketika menggunakan communtuk membandingkan bilangan bulat positif dalam file, bukan teks. Jadi kita berhadapan dengan angka non-desimal.
Jawaban singkat:
Bergantung pada penggunaan -nsakelar dengan sortperintah yang digunakan untuk mengurutkan hasil yang disediakan comm, urutan hasil yang dikembalikan oleh commbisa sangat berbeda:
Lexographic : Penggunaan -nswitch dengan sort akan menghasilkan "bilangan bulat positif" yang dipesan dalam serangkaian angka yang meningkat. " Kesalahan " dapat ditekan menggunakan commsakelar `s--nocheck-order
Byte Order : TIDAK ada gunanya -n switchdengan sort. LC_COLLATEmenentukan pemesanan yang bahkan dapat bervariasi dengan bagaimana localediatur pada host tempat perintah dieksekusi. Ini adalah input yang commdiharapkan secara default. Sedikit lebih banyak tentang LC_COLLATEdapat ditemukan di sini: Reference1 dan Reference2
Apakah kesalahan itu masalah?
Itu tergantung pada apa yang ingin Anda capai. Seperti yang akan Anda lihat dalam contoh di bawah ini,commmengembalikan hasil yang sama setelah membandingkan file dengan atau tanpa sakelarsort`s-n, meskipun pemesanan mereka akan bervariasi dengan cara di atas tergantung pada apakah-n switchdigunakan dengansortperintah. Saya sendiri, saya lebih suka "lexographic" hasil yang terurut- angka yang meningkat dalam serangkaian.
Namun jika Anda tidak menginginkan hasil dalam urutan " leksografis ", maka JANGAN gunakan -nsakelar saat menyortir data yang disediakan communtuk perbandingan.
PENGUJIAN:
Kami akan membandingkan hasil commperintah dengan dan tanpa, -nsakelar. Saya telah meningkatkan kompleksitas set data uji spesimen saya sesuai permintaan Kusalananda:
Data uji :
file1.txt :
40
110000
2200
6
33000
file2.txt :
2200
40
33000
6
440000
Persimpangan :
Daftar hanya angka-angka yang umum untuk KEDUA file
Tanpa -nberalih:
comm -12 <(sort file1.txt) <(sort file2.txt)
2200
33000
40
6
Hasil : Benar, tetapi dikembalikan dalam urutan yang tidak disortir
DENGAN -n Switch:
comm -12 <(sort -n file1.txt) <(sort -n file2.txt)
6
40
2200
33000
comm: file 1 is not in sorted order
Hasil : Benar, tetapi dikembalikan dalam urutan LEXOGRAPHIC . Operasi selesai dengan sukses dan mengembalikan hasil yang sama seperti menggunakan commtanpa -nsaklar, tetapi dalam daftar yang diurutkan.
Perbedaan :
Daftar hanya angka unik untuk setiap file:
Tanpa -nberalih:
comm -3 <(sort file1.txt) <(sort file2.txt)
110000
440000
Hasil : Benar - angka-angka ini memang eksklusif untuk setiap file masing-masing.
DENGAN -n Switch:
comm -3 <(sort -n file1.txt) <(sort -n file2.txt)
110000
comm: file 1 is not in sorted order
440000
Hasil : Benar, hasil yang sama seperti commtanpa -nsaklar, tetapi mengembalikan kesalahan tentang urutan bilangan bulat positif yang tidak diurutkan dalam file itu sendiri.
SOLUSI untuk HASIL LEXOGRAPHIC:
Gunakan sakelar comm`s --nocheck-orderuntuk menekan pesan kesalahan. Karena kita tahu angkanya tidak diurutkan dalam setiap file tetapi hasilnya dikembalikan dengan comm -nbenar kesalahan dapat diabaikan dengan aman dengan menekannya:
Persimpangan :
comm -12 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)
6
40
2200
33000
Perbedaan :
comm -3 --nocheck-order <(sort -n file1.txt) <(sort -n file2.txt)
110000
440000
KESIMPULAN:
Kesalahan " file tidak dalam urutan " ketika dikembalikan mengurutkan bilangan bulat positif diumpankan commtidak berarti hasil dikembalikan menggunakan -nswitch dengan commyang salah. Memang, menggunakan comm -nmengembalikan yang benar dengan urutan yang terurut!
Terima kasih kepada @dhag, @kusalananda @ChrisDown karena telah mengangkat masalah yang membutuhkan ekspansi lebih lanjut. Selalu senang dengan pekerjaan saya ditinjau: satu-satunya cara kita bisa menjadi lebih baik adalah jika kita terus-menerus didorong dan ditantang oleh rekan-rekan kita.