regex - Bash 使用 awk 从文件中选择有效行

标签 regex dataframe awk

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

基本上检查 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

关于regex - Bash 使用 awk 从文件中选择有效行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58397279/

相关文章:

c# - 如何防止 HTML 进入 ASP.NET Web 窗体文本框

python - 使用 Python 正则表达式切入模式

Javascript正则表达式匹配捕获返回整个匹配,而不是组

python - R数据框的首选数据格式

linux - 使用 grep、sed 或 awk 解析字符串

regex - excel-vba正则表达式模式

python - 根据条件将 Pandas DataFrame 中的一行替换为 'NaN'

dataframe - 从 dask 系列列表创建 dask DataFrame

regex - 使用 sed/awk 匹配 n 个空格后的单词

regex - awk 是在日志文件中搜索日期/时间范围的最快方法吗?