Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Командная строка Linux. ПолноС руководство». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 57

Автор Уильям Шоттс

05/13/2008 Fedora 9

04/24/2008 Ubuntu 8.04

11/08/2007 Fedora 8

10/18/2007 Ubuntu 7.10

10/04/2007 SUSE 10.3

05/31/2007 Fedora 7

04/19/2007 Ubuntu 7.04

12/07/2006 SUSE 10.2

10/26/2006 Ubuntu 6.10

10/24/2006 Fedora 6

06/01/2006 Ubuntu 6.06

05/11/2006 SUSE 10.1

03/20/2006 Fedora 5

join β€” объСдинСниС строк ΠΈΠ· Π΄Π²ΡƒΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ полю


ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° join дСйствуСт ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ paste, Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° добавляСт ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π² Ρ„Π°ΠΉΠ», Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ это ΠΏΠΎ-своСму. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ join Ρƒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ассоциируСтся с рСляционными Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π³Π΄Π΅ ΠΎΠ½Π° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ записи ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΠΎ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ полю. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° join выполняСт Ρ‚Ρƒ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. Она ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· мноТСства Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° ΠΎΠ±Ρ‰Π΅Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ дСйствуСт опСрация join Π² рСляционной Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… с двумя Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ записи Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ. ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π°, с ΠΈΠΌΠ΅Π½Π΅ΠΌ CUSTOMERS, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ поля: Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (CUSTNUM), имя ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (FNAME) ΠΈ фамилия ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (LNAME):

CUSTNUM FNAME LNAME

========= ====== ======

4681934 John Smith

Вторая Ρ‚Π°Π±Π»ΠΈΡ†Π°, с ΠΈΠΌΠ΅Π½Π΅ΠΌ ORDERS, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ поля: Π½ΠΎΠΌΠ΅Ρ€ Π·Π°ΠΊΠ°Π·Π° (ORDERNUM), Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (CUSTNUM), количСство (QUAN) ΠΈ ΠΏΡƒΠ½ΠΊΡ‚ Π·Π°ΠΊΠ°Π·Π° (ITEM):

ORDERNUM CUSTNUM QUAN ITEM

========== ========= ===== ====

3014953305 4681934 1 Blue Widget

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰Π΅Π΅ ΠΏΠΎΠ»Π΅ CUSTNUM. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ устанавливаСт ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ join, ΠΌΡ‹ смоТСм ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ поля ΠΈΠ· Π΄Π²ΡƒΡ… Ρ‚Π°Π±Π»ΠΈΡ†, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΠΎΠΉ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡ совпадСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² полях CUSTNUM ΠΎΠ±Π΅ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†, опСрация join выдаст ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

FNAME LNAME QUAN ITEM

====== ====== ===== ====

John Smith 1 Blue Widget

Для дСмонстрации ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ join Π½Π°ΠΌ понадобится ΠΏΠ°Ρ€Π° Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΎΠ±Ρ‰ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Π² качСствС ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ„Π°ΠΉΠ» distros-by-date.txt ΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ сконструируСм Π΄Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄Π°Ρ‚Ρ‹ выпусков (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Ρ€ΠΎΠ»ΡŒ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π°) ΠΈ названия дистрибутивов:

[ [email protected] ~]$ cut -f 1,1 distros-by-date.txt > distros-names.txt

[ [email protected] ~]$ paste distros-dates.txt distros-names.txt > distros-key-names.txt

[ [email protected] ~]$ head distros-key-names.txt

11/25/2008 Fedora

10/30/2008 Ubuntu

06/19/2008 SUSE

05/13/2008 Fedora

04/24/2008 Ubuntu

11/08/2007 Fedora

10/18/2007 Ubuntu

10/04/2007 SUSE

05/31/2007 Fedora

04/19/2007 Ubuntu

И Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Π΄Π°Ρ‚Ρ‹ выпусков ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° вСрсий:

[ [email protected] ~]$ cut -f 2,2 distros-by-date.txt > distros-vernums.txt

[ [email protected] ~]$ paste distros-dates.txt distros-vernums.txt > distros-keyvernums.txt

[ [email protected] ~]$ head distros-key-vernums.txt

11/25/2008 10

10/30/2008 8.10

06/19/2008 11.0

05/13/2008 9

04/24/2008 8.04

11/08/2007 8

10/18/2007 7.10

10/04/2007 10.3

05/31/2007 7

04/19/2007 7.04

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ„Π°ΠΉΠ»Π° с ΠΎΠ±Ρ‰ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (ΠΏΠΎΠ»Π΅ Β«Π΄Π°Ρ‚Π° выпуска»). Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ отсортированы ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ полю, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° join Π²Ρ‹Π΄Π°Π»Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

[ [email protected] ~]$ join distros-key-names.txt distros-key-vernums.txt | head

11/25/2008 Fedora 10

10/30/2008 Ubuntu 8.10

06/19/2008 SUSE 11.0

05/13/2008 Fedora 9

04/24/2008 Ubuntu 8.04

11/08/2007 Fedora 8

10/18/2007 Ubuntu 7.10

10/04/2007 SUSE 10.3

05/31/2007 Fedora 7

04/19/2007 Ubuntu 7.04

ΠžΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² качСствС раздСлитСля ΠΏΠΎΠ»Π΅ΠΉ Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… join ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ символы табуляции, Π° Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ β€” ΠΏΡ€ΠΎΠ±Π΅Π». Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π—Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ подробностями ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ страницС справочного руководства (man) для join.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ тСкста


Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ часто Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ вСрсии тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ². Для систСмных администраторов ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния это особСнно Π²Π°ΠΆΠ½ΠΎ. БистСмному администратору, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсиСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΡΡƒΡ‚ΡŒ возникшСй ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Аналогично, программисту часто Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ измСнСния, ΠΏΡ€ΠΎΠΈΡΡˆΠ΅Π΄ΡˆΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

comm β€” построчноС сравнСниС Π΄Π²ΡƒΡ… сортированных Ρ„Π°ΠΉΠ»ΠΎΠ²


ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° comm сравниваСт Π΄Π²Π° тСкстовых Ρ„Π°ΠΉΠ»Π°, показывая, ΠΊΠ°ΠΊΠΈΠ΅ строки Π² Π½ΠΈΡ… ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅, Π° ΠΊΠ°ΠΊΠΈΠ΅ β€” ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅. Для дСмонстрации создадим с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ cat Π΄Π²Π° ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°:

[ [email protected] ~]$ cat > file1.txt

a

b

c

d

[ [email protected] ~]$ cat > file2.txt

b

c

d

e

Π—Π°Ρ‚Π΅ΠΌ сравним эти Π΄Π²Π° Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ comm:

[ [email protected] ~]$ comm file1.txt file2.txt

a

b

c

d

e

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, comm ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π»Π° Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ‚Ρ€ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° содСрТит ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ строки ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, вторая β€” ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ строки ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ρ‚Ρ€Π΅Ρ‚ΡŒΡ β€” строки, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Π² ΠΎΠ±ΠΎΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ…. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° comm ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ -n, Π³Π΄Π΅ n ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ числом 1, 2 ΠΈΠ»ΠΈ 3. ΠŸΡ€ΠΈ использовании эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ, Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слСдуСт ΠΏΠΎΠ΄Π°Π²ΠΈΡ‚ΡŒ. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ строки, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ 1 ΠΈ 2:

[ [email protected] ~]$ comm -12 file1.txt file2.txt

b

c

d

diff β€” построчноС сравнСниС Ρ„Π°ΠΉΠ»ΠΎΠ²


Подобно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ comm, diff ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выявлСния Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Однако diff Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТный инструмСнт, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π²ΠΎ мноТСствС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ΠΈ способный ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сразу ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° diff часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для исслСдования Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ вСрсиями исходного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ позволяСт рСкурсивно ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ исходного ΠΊΠΎΠ΄Π° (source trees). Часто ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° diff примСняСтся для создания diff-Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΠ»ΠΈ Π·Π°ΠΏΠ»Π°Ρ‚ (patches), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ patch (ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ рассказываСтся Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅), для прСобразования Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ вСрсии Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ.

Если ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ diff ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.

[ [email protected] ~]$ diff file1.txt file2.txt

1d0

< a

4a4

> e

Π’ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° измСнСния (Ρ‚Π°Π±Π». 20.4) Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ β€” опСрация β€” Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈ Ρ‚ΠΈΠΏΡ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ.

Π’Π°Π±Π»ΠΈΡ†Π° 20.4. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ измСнСния, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ diff

Команда

ОписаниС

r1ar2

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строки, находящиСся Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ r2 Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, послС строк Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ r1 Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅

r1cr2

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ (Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ) строки Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ r1 Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ строками Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ r2 Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅

r1dr2

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ строки Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ r1 Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π±Ρ‹ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ r2 Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅


Π’ этом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ любой Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ прСдставлСн списком Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ строки. Π₯отя этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для совмСстимости со стандартом POSIX ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости с Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ вСрсиями diff для Unix), ΠΎΠ½ Π½Π΅ Ρ‚Π°ΠΊ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹. Π”Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΡ… Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ, β€” это контСкстный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.

ΠŸΡ€ΠΈ использовании контСкстного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -c) Π²Ρ‹Π²ΠΎΠ΄ выглядит Ρ‚Π°ΠΊ:

[ [email protected] ~]$ diff -c file1.txt file2.txt

*** file1.txt 2012-12-23 06:40:13.000000000 -0500

--- file2.txt 2012-12-23 06:40:34.000000000 -0500

***************

*** 1,4 ****

- a

b

c

d

--- 1,4 ----

b

c

d

+ e

Π’Ρ‹Π²ΠΎΠ΄ начинаСтся с ΠΈΠΌΠ΅Π½ Π΄Π²ΡƒΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ послСднСго ΠΈΡ… измСнСния. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» отмСчаСтся Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ°ΠΌΠΈ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” дСфисами. На протяТСнии всСй ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части листинга эти ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ Ρ„Π°ΠΉΠ»Ρ‹. Π”Π°Π»Π΅Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ число ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… строк, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… контСкст. ΠŸΠ΅Ρ€Π²Π°Ρ Π³Ρ€ΡƒΠΏΠΏΠ° начинаСтся со строки *** 1,4 ****, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π½Π° строки с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ с 1 ΠΏΠΎ 4 Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Π”Π°Π»Π΅Π΅ слСдуСт строка --- 1,4 ----, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π° строки с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ с 1-Π³ΠΎ ΠΏΠΎ 4-ΠΉ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ строки, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², пСрСчислСнных Π² Ρ‚Π°Π±Π». 20.5.

Π’Π°Π±Π»ΠΈΡ†Π° 20.5. Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ diff ΠΏΡ€ΠΈ использовании контСкстного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°

Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

(Π½Π΅Ρ‚)

Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΏΠΎΠΊΠ°Π·Π°Π½Π° для контСкста. Π’ Π½Π΅ΠΉ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ

-

Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΡƒΠ΄Π°Π»Π΅Π½Π°. Π­Ρ‚Π° строка присутствуСт Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ отсутствуСт Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ

+

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π°. Π­Ρ‚Π° строка присутствуСт Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ отсутствуСт Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ

!

Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°. Выводятся Π΄Π²Π΅ вСрсии строки, каТдая Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ


Π£Π½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ контСкстный, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ. ЗадаСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -u:

[ [email protected] ~]$ diff -u file1.txt file2.txt

--- file1.txt 2012-12-23 06:40:13.000000000 -0500

+++ file2.txt 2012-12-23 06:40:34.000000000 -0500