按条目拆分文本文件

Ale*_*rdt 2 scripts


我正在尝试分析一个巨大的文本文件 (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 日)。
如何根据日期将此文件拆分为多个部分?

我所知道的一切都是grep file '20090118*' > data20090118.dat,但肯定有一种方法可以一次完成所有日期,对吗?

每个日期的条目数不同,因此使用split常量数是行不通的。

提前致谢,
亚历克斯

hto*_*que 6

假设文件已排序并且日期始终存在,这应该有效:

#!/bin/bash

base_dir='./'    

while read line; do
    date="${line:0:8}"
    echo "$line" >> "$base_dir$date.txt"
done < "$1"
Run Code Online (Sandbox Code Playgroud)

[另存为my_splitter,通过运行使其可执行chmod +x my_splitter,然后像这样调用./my_splitter input_file]

它逐行读取输入文件,提取日期并使用它来将具有相同日期的行附加到同一个文件中。

base_dir是目标目录,文件的格式为<date>.txt. 注意:现有文件不会被覆盖,由于>>重定向器会附加新行,因此最好确保目标目录不包含任何形式的文件<date>.txt