У меня большой набор данных с некоторыми недопустимыми строками. Я хочу скопировать в другой файл только те строки, которые начинаются с правильной даты (цифры регулярного выражения).
В основном проверьте, является ли awk $ 1 цифрой ([0-9]), если да, запишите всю строку ($ 0) ввыходной файл, если нет, пропустите эту строку, перейдите к следующей строке.
Как я это себе представляю (обе версии дают синтаксическую ошибку):
awk '{if ($1 =~ [0-9]) print $0 }' >> output.txt
awk '$1 =~ [0-9] {print $0}' filename.txt
, в то время как при этом выводится первое поле,Я понятия не имею, как поступить.
awk '{ print $1 }' filename.txt
19780101
19780102
19780103
a
19780104
19780105
19780106
...
Полный набор данных:
19780101 1 1 1 1 1
19780102 2 2 2 2 2
19780103 3 3 3 3 3
a a a a a a
19780104 4 4 4 4 4
19780105 5 5 5 5 5
19780106 6 6 6 6 6
19780107 7 7 7 7 7
19780108 8 8 8 8 8
19780109 9 9 9 9 9
19780110 10 10 10 10 10
19780111 11 11 11 11 11
19780112 12 12 12 12 12
19780113 13 13 13 13 13
19780114 14 14 14 14 14
19780115 15 15 15 15 15
19780116 16 16 16 16 16
a a a a a a
19780117 17 17 17 17 17
19780118 18 18 18 18 18
19780119 19 19 19 19 19
19780120 20 20 20 20 20
Набор данных можно воспроизвести с помощью R
library(dplyr)
library(DataCombine)
N <- 20
df = as.data.frame(matrix(seq(N),nrow=N,ncol=5))
df$date = format(seq.Date(as.Date('1978-01-01'), by = 'day', len = N), "%Y%m%d")
df <- df %>% select(date, everything())
df <- InsertRow(df, NewRow = rep("a", 6), RowNum = 4)
df <- InsertRow(df, NewRow = rep("a", 6), RowNum = 18)
write.table(df,"filename.txt", quote = FALSE, sep="\t",row.names=FALSE)
Вопросы о чтении первых N строк не отвечают моим потребностям, потому что мои недопустимые строки могут быть где угодно. Это решение по какой-то причине не работает.