我想以结构化的方式保存一些数据,以便以后使用它。现在,我有不同的bash / perl脚本来提取大量数据并将其格式化为多个不同的文本文件。我正在自动化所有这些。现在我有一个观察列表(环境,像下雨,冰雹......),行中有一些变量(每行都是一个观察点)。我可以用bash提取这一切,但是时间和zome(Lat / Long)我需要检查其他变量,每次观察800次。我想知道如何将观察结果(或更多)存储在800个变量(名称,值)中以便以后使用它。我想知道我是否应该找一些其他的.txt文件。
除此之外,所有800个变量实际上是在不同时间(00,03,06,...,48)重复相同的变量(相同名称)。另外,由于某种原因,一些变量同时具有相同的名称和不同的值(这不是我的数据)。
现在,我可以阅读观察的每一行并查看每个变量。现在我需要用1个变量堆栈(800)放置1个观察值,并为每一行执行此操作。
您是否对我使用的格式(较少的程序/扩展/等是最好的)存储这个想法?我看到.csv文件或.txt文件,但我似乎无法想出一种简单的方法来对所有这些(以及如何做)进行分类。
我写过这样的东西;
while IFS=' ' read -r year month date lat long #And other variables to read line.
do
./MyExtractionScript.ksh $lat $long #I need lat/long for position.
done < "$File"
现在我的 MyExtractionScript.ksh 将所有内容保存到${fileout}
的格式,其中每一行都是 TMPDIR 中文件的变量,就像这样; < / p>
BS 8500 0 7.5339
RE 0 0 5.9412
UU 12000 3 6.0882
VV 12000 3 -11.0595
变为“3”的“0”是小时(0到48),“VV”是名称。
我应该在csv中做观察对象,每小时里面有时间对象吗?怎么样? :(
对不起,我的问题很长,远非精确,简短或简洁。无论如何,我不是专家。请帮我解决这个问题。
提前致谢。祝你有美好的一天。
PS:对不起我的英语,我是来自蒙特利尔的法语加拿大人。
答案 0 :(得分:1)
您可以使用CSV文件。这是一个逗号分隔值文件。 Perl中Text::CSV_XS的强大且可能最简单的方法。这就是CSV文件应该是什么样子,我相信它是自我解释的并且是一种简单的格式:
Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""",,5000.00
1996,Jeep,Grand Cherokee,"MUST SELL!
air, moon roof, loaded",4799.00
你想要的是这个:
# Write array of arrays as csv file
csv (in => $aoa, out => "file.csv", sep_char=> ";");
然后稍后打开它:
my $aoa = csv (in => "data.csv");
然后检索要编辑或查看的数据:
my @rows;
my $csv = Text::CSV_XS->new ({ binary => 1, auto_diag => 1 });
open my $fh, "<:encoding(utf8)", "test.csv" or die "test.csv: $!";
while (my $row = $csv->getline ($fh)) {
$row->[2] =~ m/pattern/ or next; # 3rd field should match
push @rows, $row;
}
close $fh;
$csv->eol ("\r\n");
open $fh, ">:encoding(utf8)", "new.csv" or die "new.csv: $!";
$csv->print ($fh, $_) for @rows;
close $fh or die "new.csv: $!";
它提供的概要应该适合您的需要,除非您想要一个具有ACID属性的真实数据库。
答案 1 :(得分:0)
对于您的问题,我建议您使用SQLite。