ProIT: медіа для профі в IT
3 хв.

Сортування, об’єднання, перетасування, пропускання та нумерація рядків у Linux

author avatar ProIT NEWS

Щоразу, коли вам потрібно працювати зі списками, які зберігаються як текстові файли в Linux, особливо з довгими, ви можете скористатися деякими простими командами, щоб полегшити роботу з ними.

Будь-який текстовий файл можна легко відсортувати, але ви також можете довільно впорядкувати рядки, пронумерувати їх або об’єднати файли, коли два мають спільні початкові поля. Насправді, якщо ви хочете бачити лише кожен другий рядок або кожен п’ятий рядок у файлі, то також можете це зробити. У наведеному дописі Network World описано команди для виконання усіх цих дій.

Команда sort робить сортування текстових файлів дуже легким. Щоб переглянути вміст текстового файлу в порядку сортування, все, що вам потрібно зробити, це ввести таку команду:

$ sort myfile

Якщо ви хочете зберегти результат або додати його до кінця іншого файлу, одна з наведених нижче команд зробить це за вас.

$ sort myfile > sortedfile
$ sort myfile >> otherfile

Після додавання рядків до наявного файлу, як показано у другій команді вище, вам може знадобитися відсортувати його знову. Наведені нижче команди зроблять це за вас і гарантують, що файл має оригінальну назву.

$ sort otherfile > otherfile.new
$ mv otherfile.new otherfile

Команда sort також має досить багато параметрів. Наприклад, якщо у вас є файл із датами в алфавітному порядку, то можна перейти до відображення його в порядку річних дат за допомогою параметра -M у команді праворуч нижче:

$ cat birthdays             $ sort -M birthdays
Jan 4, 1972                 Jan 4, 1972
Mar 18, 1949                Jan 8, 1954
May 1, 1976                 Mar 18, 1949
Jan 8, 1954                 May 1, 1976
Sep 23, 1979                Aug 6, 1956
Aug 6, 1956                 Sep 23, 1979

Щоб відсортувати довгий список кольорів і відобразити їх у стовпцях, скористайтеся такою командою:

$ sort colors | column
Aqua            Brown           Gold            Navy blue       Purple          Tomato          Yellow
Azure           Chocolate       Green           Navy blue       Red             Turquoise
Black           Cyan            Grey            Olive           Salmon          Violet
Blue            Cyan            Lime            Orange          Sİlver          Wheat
Bronze          Dark blue       Maroon          Pink    

Щоб довільно розташувати рядки в текстовому файлі, використовуйте команду shuf (перемішувати). Наприклад, якщо ви хочете щомісяця перетасовувати список друзів, щоб випадковим чином вибрати, кого з них запросити на обід, то можете використати таку команду:

$ shuf friends | head -2
Sam
Patty

Виконайте команду кілька разів поспіль, і кожного разу ви повинні отримати інший список.

Якщо бажаєте відсортувати рядки файлу за числом (припустимо, що вони не вказані за числом), скористайтеся параметром sort -n. Однак пам’ятайте, що будь-які рядки, які не починаються з числа, з’являться першими.

$ sort -n story | head -5
1       Once upon a time
2       There was a Linux elf
3       who liked to surprise
4       users by introducing
5       new commands.

Команда awk дає змогу переглядати кожен другий, третій, четвертий або N-й рядок у файлі за допомогою аргументу NR (номер запису), як показано у командах нижче.

Перша команда забезпечує відображення лише 2-го, 4-го, 6-го тощо рядків. Другий буде відображати кожен 7-й рядок. Подумайте про перше як про те, що якщо номер рядка, поділений на 2, залишає залишок 0, тоді відобразіть його.

$ awk 'NR % 2 == 0' filename
$ awk ‘NR % 7 == 0’ filename

Ось два приклади: в одному відображається кожен другий рядок, а в іншому – кожен третій рядок файлу. Файл, який використовується, має пронумеровані рядки, щоб було зрозуміліше, що відбувається.

$ awk 'NR % 2 == 0' myfile | head -6
2       There was a Linux elf
4       users by introducing
6
8       didn't know much about
10      line. As a result, none
12      tried actually worked
$ awk 'NR % 3 == 0' myfile | head -6
3       who liked to surprise
6
9       working on the command
12      tried actually worked
15      That's all we know about
18      command "cheat sheet" and

Щоб зробити те саме зі списком кольорів, вихідні рядки не будуть пронумеровані. Ця команда відображає 13-й і 26-й рядки у файлі кольорів.

$ awk 'NR % 13 == 0' colors
Turquoise
Chocolate

Щоб пронумерувати рядки у текстовому файлі, використовуйте команду nl (number lines). У наведеному нижче прикладі команда додає номери рядків до файлу кольорів.

$ nl colors
     1  Black
     2  Grey
     3  Red
     4  Blue
     5  Orange
     6  White
     7  Brown
     8  Pink
     9  Yellow
    10  Green
    11  Purple
    12  Maroon
    13  Turquoise
    14  Cyan
    15  Navy blue
    16  Gold
    17  Tomato
    18  Teal
    19  Lime
    20  Cyan
    21  Wheat
    22  Salmon
    23  Olive
    24  Aqua
    25  Violet
    26  Chocolate
    27  Azure
    28  Sİlver
    29  Bronze
    30  Dark blue
    31  Navy blue

Як бачите, Linux надає багато зручних команд для керування вмістом текстових файлів. Використовуйте команди, надані у цьому матеріалі.

Також читайте на ProIT: Сила символів >, >>, &, && та || на Linux.

Підписуйтеся на ProIT у Telegram, щоб не пропустити жодну публікацію!

Приєднатися до company logo
Продовжуючи, ти погоджуєшся з умовами Публічної оферти та Політикою конфіденційності.