Печатать каждую n-ю строку в строке с помощью gawk
У меня очень большой файл, в котором мне нужно получить каждую 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;}
}
Ответы
Ответ 1
Чтобы распечатать каждую вторую строку, начиная с первой:
awk 'NR%2==1' file.txt
Чтобы напечатать каждую десятую строку, начиная с десятой строки:
awk 'NR%10==0' file.txt
Чтобы использовать это в script, добавьте следующее в файл с именем script.awk
:
BEGIN {
print "Processing file"
}
NR%10==0
END {
print "Finished processing"
}
Затем выполните:
awk -f script.awk file.txt
Ответ 2
С помощью 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
Ответ 3
Кусок торта: cat test.txt | awk 'NR % 10 == 1'
Ответ 4
Это не (g) awk, но он будет работать:
cat myfile | grep ^[[:digit:]]*0[[:blank:]]
должен сделать трюк.