我有一些无效行的大数据集。我只想将以有效日期(正则表达式数字)开头的行复制到另一个文件。

基本上检查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行的问题无法满足我的需求,因为无效行可能在任何地方。 This solution由于某些原因无法正常工作。

最佳答案

由于您的数据集很大且要求如此简单,因此可以使用grep,因为它比awk更快:

grep '^[0-9]' file

10-06 05:10