Краткий ответ :
Действие по умолчанию в awk
для совпадения - печать строки:
awk 'NR% 8 ~ / 3 | 7 | 0 /' input.csv
Длинный ответ , вдохновленный комментариями @ kvantour
awk 'NR%8~/3|7|0/' input.csv
# or shorter (when module < 10)
awk 'NR%8~/[037]/' input.csv
Когда вам нужно по модулю> 9, вам нужно сопоставить всю строку с маркерами ^$
. С модулем 25 и строками 3,7,8,11,14,22 вы можете использовать
awk 'NR%25~/^[3|7|0|11|14|22]$/' input.csv
# or shorter
awk 'NR%25~/^[037]|1[14]|22$/' input.csv
Это становится труднее читать для большего количества значений. Альтернатива
# Original case
awk 'BEGIN {a[3];a[7];a[0]} NR%8 in a' input.csv
# 3,7,8,11,14,22
awk 'BEGIN {a[3];a[7];a[8];a[11];a[14];a[22];} NR%25 in a' input.csv
Вытащить цифры:
# Original case
awk 'FNR==NR {a[$0];next} FNR%8 in a' <(printf "%s\n" 3 7 0) input.csv
# 3,7,8,11,14,22
awk 'FNR==NR {a[$0];next} FNR%25 in a' <(printf "%s\n" 3 7 8 11 14 22) input.csv