删除csv文件中模式匹配的第n个示例的文本

vd2z7a6w  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(341)

我在想办法去掉第一个 n 来自的行 csv 文件夹。
基本上,我得到了几百个csv文件的转储,任务是创建一个可查询的mysql数据库。文件中有一个非csv格式的图例占据了第一个位置 ~10 行,并在尝试导入mysql时抛出错误。图例的长度是可变的,因为并非所有文件都具有相同数量的参数。
我正在寻找一种方法来删除这个传说,我能找到的唯一模式是第一个 csv 元素总是单词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 不知道怎么让它跳到第二个示例。我在递归函数中尝试了上述方法,但没有成功。
有什么建议吗?

azpvetkf

azpvetkf1#

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

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

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

zrfyljdw

zrfyljdw2#

awk 为救援干杯!

$ awk '/year/{c++} c>1' file

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

相关问题