如何使用bash将所有csv文件的前200行保存在目录中?

AGamePlayer

我有大约50个非常大的csv文件,它们有数千行。

而且我只想保留每行的前200行-如果生成的文件覆盖原始文件,我可以。

我应该使用什么命令来执行此操作?

库萨兰达

假设当前目录包含所有CSV文件,并且它们都具有.csv文件名后缀:

for file in ./*.csv; do
    head -n 200 "$file" >"$file.200"
done

使用head和重定向将每个CSV文件的前200行输出到新文件新文件的名称与旧文件的名称相同,但.200附加在名称的末尾。没有检查以查看新文件名是否已经存在。

如果要更换原件:

for file in ./*.csv; do
    head -n 200 "$file" >"$file.200" &&
    mv "$file.200" "$file"
done

&&在年底head命令使得它如此的mv,如果有一些问题与运行将不会运行head

如果您的CSV文件分散在当前目录下的子目录中,请使用,然后使用shopt -s globstar替换./*.csv循环中的模式./**/*.csv这将在当前目录中或以下找到任何CSV文件,并对每个目录执行操作。**“递归”下子目录名匹配模式的比赛,但只有当globstar外壳选项设置。


对于包含带有嵌入式换行符的数据的CSV文件,以上内容将无法正常运行,因为您可能会截断一条记录。取而代之的是,您将不得不使用一些支持CSV的工具来为您完成这项工作。

以下使用CSVkit(用于解析和通常使用CSV文件的一组命令行工具),以及jq用于处理JSON文件的工具。

CSV工具包中没有工具可以在特定点截断CSV文件,但是我们可以将CSV文件转换为JSON并jq仅用于输出前200条记录:

for file in ./*.csv; do
    csvjson -H "$file" | jq -r '.[:200][] | map(values) | @csv' >"$file.200" &&
    mv "$file.200" "$file"
done

给定一些CSV文件,例如下面的简短示例,

a,b,c
1,2,3
"hello, world",2 3,4
"hello
there","my good
man",nice weather for ducks

csvjson命令将产生

[
  {
    "a": "a",
    "b": "b",
    "c": "c"
  },
  {
    "a": "1",
    "b": "2",
    "c": "3"
  },
  {
    "a": "hello, world",
    "b": "2 3",
    "c": "4"
  },
  {
    "a": "hello\nthere",
    "b": "my good\nman",
    "c": "nice weather for ducks"
  }
]

jq然后,工具将执行此操作,并针对数组中的每个对象(限制为前200个对象),将值提取为数组并将其格式化为CSV。

可能可以直接使用csvpyCSVkit中的另一个工具进行此转换,但是由于我不具备Python技能,因此我不会尝试提出一种解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

bash:使用文件名列表来连接目录中的匹配文件,并将所有文件保存在新目录中

如何将字符串附加到Bash目录中所有文件的所有行中?

如何使用Pharo在目录中查找所有.csv文件?

如何使用bash查找目录中的所有文件路径

如何使用numpy以行和列格式将数据保存在.csv文件中

使用“to_csv”和“os.path”将CSV保存在与python文件相同的目录中?

使用python重命名目录中的所有文件以在每个文件中存在的行

如何使用bash将所有文件从多个目录移动到其父目录

如何将所有保存在Dropbox中的文件保存到我的HTML页面

使用Bash将当前目录保存在变量中?

如何清除目录中存在的所有文件中的数据?

如何将文件保存在“下载”目录中?

在for循环中使用try ... catch结构时如何将所有错误保存在文件中

如何打开目录中的所有文件并将更改保存在同一文件中?

如何将所有循环的结果保存在csv中

如何在目录中的所有文件前添加一行?

如何串联目录中的所有CSV,并使用Python将CSV名称添加为列

将行的副本保存在csv文件中

将 .csv 行保存在不同的文件中

如何将所有值保存在单个txt文件中?

如何使用机器人框架删除目录中存在的所有文件

如何使用writeToFile将图像保存在文档目录中?

使用bash,如何从目录中的所有文件中创建类路径?

从位于文件夹中的所有 csv 文件(8000 个文件)中复制第二行,并将其保存在新的 csv 文件中,包括标题

使用Python从目录中读取所有csv文件

使用`purrr:map()`读取目录中的所有csv文件

将文件的前7个文件保存在以c开头的目录/ bin中

如何使用某些默认文件名自动将所有未保存的选项卡保存在我的记事本++中?

如何使用bash列出目录中的所有pdf文件,按字母倒序排序?