печатать каждую n-ю строку подряд, используя gawk - PullRequest
20 голосов
/ 02 апреля 2012

У меня есть очень большой файл, в котором мне нужно получить каждую n-ю строку и напечатать ее в строку.

Мои данные:

1      937  4.320194
2      667  4.913314
3      934  1.783326
4      940  -0.299312
5      939  2.309559
6      936  3.229496
7      611  -1.41808
8      608  -1.154019
9      606  2.159683
10     549  0.767828

Я хочу, чтобы мои данные выглядели так:

1      937  4.320194
3      934  1.783326
5      939  2.309559
7      611  -1.41808
9      606  2.159683

Это, конечно, пример, я хочу каждую десятую строку для моего огромного файла данных. Я пробовал это до сих пор:

 NF == 6 {
     if(NR%10) {print;}
     }

Ответы [ 5 ]

47 голосов
/ 02 апреля 2012

Для печати каждой второй строки, начиная с первой:

awk 'NR%2==1' file.txt

Для печати каждой десятой строки, начиная с десятой строки:

awk 'NR%10==0' file.txt

Чтобы использовать это в сценарии, добавьте в файл с именем script.awk следующее:

BEGIN {
    print "Processing file"
}

NR%10==0

END {
    print "Finished processing"
}

Затем выполните:

awk -f script.awk file.txt
15 голосов
/ 02 апреля 2012

С помощью sed вы можете легко выполнить множество изменений с помощью команды first~stepНапример:

# Odd lines
sed -n 1~2p file
# Every tenth line (10, 20, 30, ...)
sed -n 10~10p file
# Every tenth line (1, 11, 21, ...)
sed -n 1~10p file
# First plus every tenth (1, 10, 20, 30, ...)
sed -n -e 1p -e 10~10p file
9 голосов
/ 02 апреля 2012

кусок пирога: cat test.txt | awk 'NR % 10 == 1'

2 голосов
/ 02 апреля 2012

Это не (g) awk, но это будет работать:

cat myfile | grep ^[[:digit:]]*0[[:blank:]] должно сработать.

0 голосов
/ 22 февраля 2019

Делаем это прямо в командной строке (Windows).

Поместите файл gawk.exe в папку, в которой он находится, и запустите командную строку в папке и введите

gawk "NR%n==x" oldfile.txt>newfile.txt

n - это каждая n-я строка, которую вы хотите напечатать, а x - начальная строка.

Eg n = 10 и x = 1, строка печати 1,11,21,31,41 ...... конец строки из исходного файла в новый файл.

Eg n = 20 и x = 5, строка печати 5,25,45,65 ...... конец строки из исходного файла в новый файл.

...