Как пропустить каждые три строки с помощью awk

Вот функция POSIX для этого:

mtime() {
   touch -r "$1" /etc/fstab
   diff -u /etc/fstab /dev/null | head -n 1 | cut -f 2
}

Результат:

$ mtime ~/.profile
2019-07-01 06:25:34.000000000 -0500

http://cup.github.io/autumn/util/path/file-mtime

0
04.05.2021, 22:02
4 ответа
$ awk 'NR%4==0 { print $0, "in line#", NR }' infile
a in line# 4
b in line# 8
c in line# 12

так:

awk 'NR%4==0' infile

измените на awk 'NR%4==1', если вы хотите напечатать первую строку, затем пропустите каждые следующие три строки.

7
28.07.2021, 11:35

Использованиеawk:

awk '{ print; getline; getline; getline}' file

getlineпереходит к следующей строке файла. См. здесь . Когда мы ничего не делаем, awkпереходит на следующую строку.

В этом случае используется три раза getline, но на awkне дается никаких действий, поэтому три строки пропускаются.

Другое использованиеgetline:

Интересно, что команда getline < "other_file"используется для чтения строки из другого файла.

Но использование getlineобычно не рекомендуется для этого типа задач и не рекомендуется использовать таким образом, заполняя встроенные переменные и не проверяя результат, см. http://awk.freeshell.org/AllAboutGetline, когда и как использовать getline.

Или используя awkс массивом:

awk '{arr[NR]=$0; }END{ for(i=1;i<=NR;i=i+3) print arr[i]}' file

Здесь arr индексируется по номерам записей NR (, т.е. строки )создаются в блоке main. В блоке ENDу нас работает цикл for.

2
28.07.2021, 11:35

Использование GNUsed:

$ sed -n '1~4p' filename
a
b
c
5
28.07.2021, 11:35

Использование стандартаsed:

sed -n 'N;N;N;P' file

Для каждой строки, прочитанной из file, считываются дополнительные три строки и добавляются к исходной строке с разделителями символов новой строки с использованием N. Затем команда Pпечатает исходную строку до первого символа новой строки.

В качестве альтернативы:

sed -n 'p;n;n;n' file

Это аналогично, но сначала печатается текущая строка, а затем считываются три другие строки, которые отбрасываются.

1
28.07.2021, 11:35

Теги

Похожие вопросы