如何像在bash中一样在Matlab中修剪csv,以便用Matlab加载csv';什么是可读的?

如何像在bash中一样在Matlab中修剪csv,以便用Matlab加载csv';什么是可读的?,bash,matlab,csv,sed,Bash,Matlab,Csv,Sed,需要分析的csv第一行包含一个无用的标签 标题位于第二行 来自第102行和第102行的其他无用信息,总计147行无用信息,其中包含的列数与上面的100行不同 相关行包含数值以及偶尔出现的NaN。 当打开csv时,它类似于: unnecessarily labeled columnA columnB columnC columnD columnE 1 2 3 4 5 4

需要分析的
csv
第一行包含一个无用的标签

标题位于第二行

来自第102行和第102行的其他无用信息,总计147行无用信息,其中包含的列数与上面的100行不同

相关行包含数值以及偶尔出现的
NaN
。 当打开
csv
时,它类似于:

unnecessarily labeled
columnA     columnB     columnC    columnD     columnE
1           2           3          4           5
4           5           6          NaN           8
[...]
301         302         303        304         305
data        that        really     belongs     in       a     separate     csv
csv示例

unnecessarily labeled,,,,,,,,
columnA,columnB,columnC,columnD,columnE,,,,
1,2,3,4,5,,,,
4,5,6,NaN,8,,,,
301,302,303,304,305,,,,
data,that,really,belongs,in,a,separate,csv,
如果我要在bash中预处理该文件,我会:

sed -e1,1d $f > $processedFilename #remove the top line
head -n -147 $processedFilename > tmp && mv tmp $processedFilename  #remove the last 147 lines
我可以在Matlab中进行类似的预处理吗?使用
readtable
,是否可以更直接地执行此操作?换句话说,我怎样才能将这个
csv
数据加载到一个表中,最好是自动填充标题,并且只使用相关的行和列?换言之,是否存在类似情况

T=readtable('patients.xls',。。。
‘范围’、‘C2:E6’、….


对于
csv
数据?

在Matlab中没有直接的方法来跳过文件末尾的行,因此实际上您最多只能读取所有数据,然后删除无关的行/列

不过,我们可以通过传递“HeaderLines”来指定要在文件开头跳过的行数

我想您需要一种在一般情况下适用于这种格式的文件的方法;但是,如果您至少知道将有多少列数据,以及最后将有多少无关的行,那么这应该是可行的:

x = readtable('file', 'HeaderLines', 1);
x = x(:, 1:num_columns);
headers = table2cell(x(1, :));
x.Properties.VariableNames = headers;
x = x(2:size(x, 1) - num_extraneous_rows, :);
首先,我们手动选择要包括的列数。 然后,我们设置表的标题。
最后,我们排除无关的行(以及包含标题的第一行)。

使用上面提供的示例数据:>>x=readtable('csvSample.csv','headerline',1);使用readtable时出错(第129行)此文件中的数据似乎不是表格格式,每行和每列中的字段数相同。您可能需要指定或修改分隔符或标题行数。在第一行添加缺少逗号之前和之后,上述错误都是相同的。这很奇怪…您使用的是什么版本的Matlab?I“我在2016a上,在您的文件中,num_columns=5,num_externous_rows=1,我没有任何问题……2014b。虽然明天我计划更新到2016a。但是,它仍然与向后兼容相关。我可以确认您的代码在Matlab 2016a中没有错误,在2014b中也没有错误。”。