我正在尝试分析一个巨大的文本文件(1.6GB),其数据行如下所示:
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
,但确实有办法一次完成所有日期,对吗?
提前致谢, 亚历
答案 0 :(得分:5)
使用awk:
awk '{print > "data"substr($1,0,8)".dat"}' myfile
答案 1 :(得分:1)
如果项目符合日期顺序,这应该有效:
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
答案 2 :(得分:0)
随着每天需要超过1条记录的警告, 并且输出文件将有空行:
uniq --all-repeated=separate -w8 file | csplit -s - '/^$/' '{*}'
我们真的应该选择uniq输出甚至uniq记录。 此外,csplit应该有一个选项来抑制匹配的行。