linux command

comm

Linux Command – comm ใช้ในวิเคราะห์เปรียบเทียบข้อมูล file 2 file ที่ทำการจัดเรียงลำดับแล้ว (sort) เทียบกันทีละบรรทัด

 

คำสั่ง

ตัวอย่างมี file text 2 file เราต้องทำการ sort ข้อมูลก่อนทุกครั้งที่จะใช้งาน comm ซึ่งถ้าเราลืม sort จะทำให้ผลลัพธ์ที่ได้ผิดไป

$ cat file1
aaaaaaaaaaa
bbbbbbbbbbb
ccccccccccc
ddddddddddd
eeeeeeeeeee
fffffffffff
ggggggggggg
$ cat file2
aaaaaaaaaaa
22222222222
ccccccccccc
zzzzzzzzzzz
xxxxxxxxxxx
33333333333
ddddddddddd
$ cat file1 |sort > file1.sort
$ cat file2 |sort > file2.sort
$ cat file1.sort
aaaaaaaaaaa
bbbbbbbbbbb
ccccccccccc
ddddddddddd
eeeeeeeeeee
fffffffffff
ggggggggggg
$ cat file2.sort
22222222222
33333333333
aaaaaaaaaaa
ccccccccccc
ddddddddddd
xxxxxxxxxxx
zzzzzzzzzzz

 

1. เปรียบเทียบ file ทั้ง 2 file

comm <file1> <file2>

ผลลัพธ์ที่ได้คือ column แรกบรรทัดที่ file1 มีแต่ file2 ไม่มี ส่วน column สอง คือ file2 มีแต่ file1 ไม่มี  และ column สุดท้ายคือบรรทัดที่มีเหมือนกันทั้ง 2 file

comm file1.sort file2.sort
      22222222222
      33333333333
            aaaaaaaaaaa
bbbbbbbbbbb
            ccccccccccc
            ddddddddddd
eeeeeeeeeee
fffffffffff
ggggggggggg
      xxxxxxxxxxx
      zzzzzzzzzzz

 

2. ปิดการแสดงผลที่ไม่ต้องการ

comm <-1,2,3> <file1> <file2>

เราสามารถปิดการแสดงผลบาง field หรือ column ที่เราไม่ได้สนใจได้ เช่น เราต้องการเปรียบเทียบบรรทัดของ file1 ว่ามี บรรทัดไหนบ้างที่ซ้ำกับ file2 เราก็สามารถปิด column1 และ 2 ได้ด้วย option -12

$ comm -1 file1.sort file2.sort
22222222222
33333333333
      aaaaaaaaaaa
      ccccccccccc
      ddddddddddd
xxxxxxxxxxx
zzzzzzzzzzz
$ comm -2 file1.sort file2.sort
      aaaaaaaaaaa
bbbbbbbbbbb
      ccccccccccc
      ddddddddddd
eeeeeeeeeee
fffffffffff
ggggggggggg
$ comm -3 file1.sort file2.sort
      22222222222
      33333333333
bbbbbbbbbbb
eeeeeeeeeee
fffffffffff
ggggggggggg
 xxxxxxxxxxx
 zzzzzzzzzzz
$ comm -12 file1.sort file2.sort
aaaaaaaaaaa
ccccccccccc
ddddddddddd

 

โครงสร้างคำสั่ง

comm [OPTION]... FILE1 FILE2

 

รายละเอียด

คำสั่งที่ใช้ในวิเคราะห์เปรียบเทียบข้อมูล file 2 file ที่ทำการจัดเรียงลำดับแล้ว (sort) เทียบกันทีละบรรทัด สามารถเปรียบเทียบออกมาได้ 3 field คือ

  • file แรกมีข้อมูล แต่ file สองไม่มี
  • file แรกไม่มีข้อมูล แต่ file สองมีข้อมูล
  • มีข้อมูลทั้ง 2 file

*** ย้ำว่าต้องทำการ sort ข้อมูลใน file ก่อนทุกครั้ง

 

Option

 -1 suppress column 1 (lines unique to FILE1)

 -2 suppress column 2 (lines unique to FILE2)

 -3 suppress column 3 (lines that appear in both files)

 --check-order
 check that the input is correctly sorted, even if all input lines are pairable

 --nocheck-order
 do not check that the input is correctly sorted

 --output-delimiter=STR
 separate columns with STR

 -z, --zero-terminated
 line delimiter is NUL, not newline

 --help display this help and exit

 --version
 output version information and exit

 Note, comparisons honor the rules specified by 'LC_COLLATE'.

 

กลุ่มคำสั่ง

join(1), uniq(1)

 

Reference:

คำสั่ง Unix – Linux Command

Linux, Unix

 

Author: Suphakit Annoppornchai

Credit: https://saixiii.com

3 Thoughts to “comm – Linux Command คำสั่งวิเคราะห์เปรียบเทียบ file ที่ละบรรทัด”

Leave a Reply