我正在尝试分析一个巨大的文本文件(1.6 to ),其数据行如下所示:
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的,但是肯定有一种方法可以一次完成所有的日期,对吧?
提前谢谢你,亚历克斯
发布于 2011-03-02 20:37:00
使用awk:
awk '{print > "data"substr($1,0,8)".dat"}' myfile发布于 2011-03-02 20:36:03
如果项目是按日期顺序排列的,这应该是可行的:
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发布于 2011-03-02 22:32:31
需要注意的是,每天都需要有1条以上的记录,并且输出文件将包含空行:
uniq --all-repeated=separate -w8 file | csplit -s - '/^$/' '{*}'我们真的应该有一个uniq的选项,甚至可以输出uniq记录。此外,csplit还应该有一个选项来抑制匹配的行。
https://stackoverflow.com/questions/5167379
复制相似问题