首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UNIX shell-scripting:按条目拆分文本文件

UNIX shell-scripting:按条目拆分文本文件
EN

Stack Overflow用户
提问于 2011-03-02 20:20:37
回答 3查看 1.7K关注 0票数 2

我正在尝试分析一个巨大的文本文件(1.6 to ),其数据行如下所示:

代码语言:javascript
复制
20090118025859 -2.400000 78.100000 1023.200000 0.000000
20090118025900 -2.500000 78.100000 1023.200000 0.000000
20090118025901 -2.400000 78.100000 1023.200000 0.000000

我甚至不知道有多少行。但我在试着按日期拆分文件。左边的数字是一个时间戳(例如,这些行来自2009年1月18日)。如何根据日期将此文件拆分成多个文件?

每个日期的条目数量不同,因此使用具有恒定数字的split将不起作用。我所知道的一切都是给grep file '20090118*' > data20090118.dat的,但是肯定有一种方法可以一次完成所有的日期,对吧?

提前谢谢你,亚历克斯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-02 20:37:00

使用awk:

代码语言:javascript
复制
awk '{print  > "data"substr($1,0,8)".dat"}' myfile
票数 5
EN

Stack Overflow用户

发布于 2011-03-02 20:36:03

如果项目是按日期顺序排列的,这应该是可行的:

代码语言:javascript
复制
date=20090101 # Change to the earliest date
while IFS= read -rd $'\n' line
do
    if [ "$(echo "$line" | cut -d ' ' -f 1 | cut -c 1-8)" -eq $date ]
    then
        echo "$line" >> "$date.dat"
    else
        let date++
    fi
done < log.dat
票数 1
EN

Stack Overflow用户

发布于 2011-03-02 22:32:31

需要注意的是,每天都需要有1条以上的记录,并且输出文件将包含空行:

代码语言:javascript
复制
uniq --all-repeated=separate -w8 file | csplit -s - '/^$/' '{*}'

我们真的应该有一个uniq的选项,甚至可以输出uniq记录。此外,csplit还应该有一个选项来抑制匹配的行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5167379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档