Пропустіть перші 6 рядків / рядків у текстовому файлі з awk


39

Як я можу пропустити перші 6 рядків / рядків у текстовому файлі (input.txt) і обробити решту awk? Формат мого сценарію awk (program.awk) такий:

BEGIN {
} 

{ 
process here
} 

END {

}

Мій текстовий файл такий:

0
3
5
0.1 4.3
2.0 1.5
1.5 3.0
0.3 3.3
1.5 2.1
.
.
.

Я хочу обробити файл, починаючи з:

0.3 3.3
1.5 2.1
.
.
.

Відповіді:


59

Використовуйте будь-який із двох шаблонів:

NR>6 { this_code_is_active }

або це:

NR<=6 { next }
{ this_code_is_active }

Використовуйте FNR замість NR, якщо у вас є багато файлів як аргументів для пробудження і хочете пропустити 6 рядків у кожному файлі.


29

Спробуйте:

awk 'FNR > 6 { #process here }' file

4
Добре! Але ви не пояснили, чому це краще - для декількох файлів FNRце номер рядка у кожному файлі, а NRномер - у всьому вхідному документі (не проблема при констатуванні).
Томаш Гандор

3

Ви також можете пропустити довільну кількість рядків на початку або в кінці файлу за допомогою headабо tailпрограм.

Для вашого конкретного питання:

tail input.txt -n+7 | program.awk

зробимо, за умови, що ваш program.awkфайл виконується. В іншому випадку ви можете використовувати

tail input.txt -n+7 | awk -f program.awk

Таким чином, ви збережете порівняння для кожного рядка і вам не потрібно змінювати логіку коду AWK.

tail почне передавати текст, починаючи з сьомого рядка, пропускаючи шість перших рядків.

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


Правильно, але, як правило, слід уникати трубопроводів, коли ви можете легко зробити це одним інструментом. Подумайте про величезний текстовий файл, що прошиває обидві команди, просто видаліть кілька рядків.
Філіппос
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.