在csv文件中删除最多第N个模式匹配实例的文本

时间:2018-07-21 01:12:48

标签: mysql csv awk sed grep

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

基本上,我已经得到了数百个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;

这会删除的第一个实例之前的所有文本,但是我不熟悉sed,因此无法弄清楚如何使其跳到第二个实例。我在递归函数中尝试了上述方法,但没有用。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

x来营救!

awk

答案 1 :(得分:1)

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

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

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