将非分隔符文本文件导入matlab

时间:2013-11-15 16:52:08

标签: matlab

我有一个问题:我已经下载了1个降雨数据。文本文件* .txt它包括文本,标题,底部文本和数据,还包括数据之间的一些空格行。 当我将文件导入Matlab时,matlab无法定义每个单元格包含列和行(非分隔符)

我确实喜欢,将文本文件转换为Excel,并非常轻松地删除列和行,并保存为其他文件。但我的数据高达846000个数据集~24小时x 30天x 12个月x 20年,它们为每个数据组合了许多不同的文件。因此很难像我一样进行手动转换。 我的顾问告诉我,有Matlab CODE可以做得很好。有没有人可以帮我解决这个问题?

原文:https://drive.google.com/file/d/0By5tEg03EXCpekNaemItMF85ZWs/edit?usp=sharing

1 个答案:

答案 0 :(得分:1)

如果您使用的是Mac或Linux,我建议使用shell将这些数据文件转换为Matlab所希望的格式,而不是试图让Matlab这样做。这也适用于Windows,但前提是你安装了类似unix的shell,如MinGW,Cygwin或Git Bash。

例如,这会将您共享的文件的原始数据部分转换为CSV:

cat "$file" | sed 's:  *:,:g' | sed 's:^,::' | grep '^[0-9]' > "$file".csv

然后,您可以循环遍历所有原始数据文件,并将它们组合成一个CSV,如下所示:

for file in *.txt; do
  cat "$file" | sed 's:  *:,:g' | sed 's:^,::' | grep '^[0-9]' >> all.csv
done

如果您需要保留,例如,哪一年和哪个气象站,您可以获得它的一点点,并在每个文件的开头捕获这些值,并将它们变成每行的列。这是一个抓住年份和气象站ID的示例,并在每天之前将其作为列插入。

for file in *.txt; do
  station="$(grep 'Station -' "$file" | sed 's: *Station - ::' | sed 's:   .*::' | uniq)"
  year="$(grep 'Water Year' "$file" | awk '{print $4}')"
  cat "$file" | sed 's:  *:,:g' | grep '^,[0-9]' |\
    sed "s/^,/$station,$year,/" >> all.csv
done