Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果在行中找到特定字符串(Python/Pandas/Bash),则拆分CSV_Pandas_Bash_Csv_Split_Header - Fatal编程技术网

如果在行中找到特定字符串(Python/Pandas/Bash),则拆分CSV

如果在行中找到特定字符串(Python/Pandas/Bash),则拆分CSV,pandas,bash,csv,split,header,Pandas,Bash,Csv,Split,Header,我有一个糟糕的CSV文件,里面有多个标题。看起来是这样的: File1: #HEADER COL1 COL2 data data data #HEADER COL1 COL2 COL3 data data data data data #HEADER COL1 COL2 COL3 COL4 data data ... 由于文件头中的错误,我无法使用pandas加载它,因此我希望将每个

我有一个糟糕的CSV文件,里面有多个标题。看起来是这样的:

File1:
    #HEADER COL1 COL2
    data
    data
    data
    #HEADER COL1 COL2 COL3
    data
    data
    data
    data
    data
    #HEADER COL1 COL2 COL3 COL4
    data
    data
    ...
由于文件头中的错误,我无法使用pandas加载它,因此我希望将每个头上的数据拆分为一个单独的文件(或pandas中的单独数据帧)。有办法做到这一点吗

此CSV由传感器生成。如果添加了传感器,标题将获得一个新列。这也可能发生在文件头中的。因此,删除这些标题并不是一个解决方案。 ()

用python/pandas实现这一点真的很好,但我也很乐意使用bash命令/脚本解决方案

预期产出:

File1:
        #HEADER COL1 COL2
        data
        data
        data
File2:
        #HEADER COL1 COL2 COL3
        data
        data
        data
        data
        data
File3:
        #HEADER COL1 COL2 COL3 COL4
        data
        data
        ...

谢谢大家!

awk
救援

$ awk '/^#HEADER/{close(FILENAME "_" c); c++} {print > (FILENAME "_" c)}' file

将输入的
文件
拆分为
文件n
部分,其中n是区段计数器。

awk
到rescue

$ awk '/^#HEADER/{close(FILENAME "_" c); c++} {print > (FILENAME "_" c)}' file

将输入的
文件
拆分为
文件n
部分,其中n是节计数器。

使用方便的
csplit
命令(按模式将文件拆分为节):

查看结果:

$ head file[0-9]
==> file0 <==
#HEADER COL1 COL2
data
data
data

==> file1 <==
#HEADER COL1 COL2 COL3
data
data
data
data
data

==> file2 <==
#HEADER COL1 COL2 COL3 COL4
data
data
...
$head文件[0-9]

==>file0 file1 file2使用方便的
csplit
命令(按模式将文件拆分为多个部分):

查看结果:

$ head file[0-9]
==> file0 <==
#HEADER COL1 COL2
data
data
data

==> file1 <==
#HEADER COL1 COL2 COL3
data
data
data
data
data

==> file2 <==
#HEADER COL1 COL2 COL3 COL4
data
data
...
$head文件[0-9]

==>文件0文件1文件2您是否能够显示预期的输出以及您尝试过的内容?这些
标题行是否总是相同的?你能发布真实的输入吗?不,标题行可以更改(但它们都以“#”)开头。因此,如果我能找到“#”,我就可以拆分文件。您是否能够显示预期的输出以及您尝试过的内容?这些
标题
行是否总是相同的?你能发布真实的输入吗?不,标题行可以更改(但它们都以“#”)开头。因此,如果我能找到“#”,我就可以拆分文件。在我的例子中,这非常有效
awk'/^#/{close(文件名“”c);c++}{print>(文件名“”c)}文件
最后一个问题:如何将结果文件导出到另一个文件夹?在我的情况下,这非常有效
awk'/^#/{close(文件名“”c);c++}{print>(文件名“”c)}”文件
最后一个问题:如何将结果文件导出到另一个文件夹?