【发布时间】:2017-08-15 11:03:58
【问题描述】:
我有一些 CSV 文件,我想用 grep(或终端的其他函数)解析这些文件,以便提取一些信息。 它们采用这种形式:
* Comment 1
* Comment line 2 explaining what the following numbers mean
1000000 ; 3208105 ; 0.18 ; 0.45 ; 0.00015 ; 0.1485 ; 0.03 ; 1 ; 1 ; 5 ; 477003 ;
* Comment 3
* Comment 4 explaining the meaning of the following lines
* Comment 5
0; 706520; p; 30.4983
1; 20859; p; 57.8
2; 192814; p; 111.842
3; 344542; p; 130.543
4; 54605; p; 131.598
5; 64746; d; 140.898
6; 442082; p; 214.11
7; 546701; p; 249.167
8; 298394; p; 305.034
9; 81188; p; 305.034
.......
在每个文件中最多有一行,其中第三个字段等于d 而不是p。所以要么有一行包含d,要么没有。
我有很多这样的文件,我想做的是从每个文件中提取包含字母 d 的行(如果存在)并在此行之后附加第一个非注释行的最后一个参数,在本例中为47703。
到目前为止,我设法分别提取了我需要的行。
有了这个,我可以从我拥有的每个文件中提取包含d 的每一行:
grep -h -E ' d;' *.csv > output.csv
有了这个,我可以从示例中的文件中准确提取数字47703:
grep -v -e "^*" -e " p; " -e " d; " example_file.csv | cut -d \; -f 11
但我不知道如何将这两者放在一起。
我想从开头的示例中获得的最终输出是这样的一行:
5; 64746; d; 140.898; 47703
我希望当前目录中的每个 CSV 文件都有这样的一行。
有没有办法做到这一点?
【问题讨论】:
-
请在您的问题中添加示例输入和该示例输入所需的输出。
-
我做到了。输入是第一个例子,输出是最后一行