【问题标题】:Remove text up to Nth instance of pattern match in csv files删除 csv 文件中最多第 N 个模式匹配实例的文本
【发布时间】:2018-12-29 07:46:48
【问题描述】:

我正在寻找一种从csv 文件中删除第一行n 的方法。

基本上,我收到了数百个 csv 文件的转储文件,任务是创建可查询的 MySQL 数据库。这些文件有一个非 csv 格式的图例,占据了第一个 ~10 行,并在尝试导入 MySQL 时引发错误。图例的长度是可变的,因为并非所有文件都具有相同数量的参数。

我正在寻找一种删除图例的方法,我能找到的唯一模式是第一个 csv 元素始终是单词 year 的第二个实例。

文件基本上看起来像这样,我希望每个文件的开头是小写 year 的第二个实例。

Legend:
non-csv text...
year: Year
... etc

(csv format) year, month, day, etc...

我查看了 sed 命令来循环遍历每个文件,但找不到完全符合我要求的命令。即:

find . -name "*.csv" | 
while read filename; 
do 
  sed -n '/year/,$p' $filename > newFile.csv;
done;

这会删除 year 第一个实例之前的所有文本,但我不熟悉 sed 并且不知道如何让它跳到第二个实例。我在递归函数中尝试了上述方法,但没有成功。

有什么建议吗?

【问题讨论】:

    标签: mysql csv awk sed grep


    【解决方案1】:

    awk 来救援!

    $ awk '/year/{c++} c>1' file
    
    (csv format) year, month, day, etc...
    

    【讨论】:

    • 太棒了,谢谢,正是我需要的。我几乎不得不接受数小时的体力劳动!
    【解决方案2】:

    这可能对你有用(GNU sed):

    sed ':a;N;s/year/&/2;Ta;s/.*\n//' file
    

    这会收集行直到year 第二次出现,然后删除所有行直到但不包括当前行。

    【讨论】:

      猜你喜欢
      • 2021-05-13
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 2012-09-27
      • 2022-01-07
      • 2023-02-07
      相关资源
      最近更新 更多