如何用fread()的skip或其他参数读取txt中特定字符串及之前的行?
用data.table的fread读取到指定行(含"tot")
要读取txt文件中col1列里"tot"及之前的所有行,可以通过以下方式实现:
方法1:先定位行号再读取
这种方法高效且跨平台,适配大多数场景:
library(data.table) # 仅读取col1列,快速定位"tot"所在的行 col1_content <- fread("your_file.txt", select = "col1") tot_line_num <- which(col1_content$col1 == "tot") # 读取从开头到"tot"所在行的所有内容 target_data <- fread("your_file.txt", nrows = tot_line_num)
- 第一步用
select = "col1"只读取目标列,避免加载整个文件,提升处理效率; - 第二步通过
which()找到"tot"的行索引,再用nrows参数限制读取行数,直接获取目标范围的内容。
方法2:结合shell命令(适合超大文件)
如果是Linux/macOS环境,可直接通过shell命令筛选后读取,无需先加载单列:
target_data <- fread('grep -n "tot" your_file.txt | cut -d: -f1 | xargs -I {} head -{} your_file.txt')
这条命令会先定位"tot"的行号,再用head截取到该行为止的内容,fread直接读取筛选后的结果。
运行后得到的结果与期望一致:
col1 col2 [1,] "class1" "5" [2,] "class2" "10" [3,] NA NA [4,] "tot" "15"
内容的提问来源于stack exchange,提问作者Wilson Souza
相关产品推荐
相关产品推荐

