bash - 如何从 CSV 中删除在 Bash 中读取的行
问题描述
我目前正在这样做:
while read l
do
echo git add $l/
git add $l/
# sed -i -e '1,1d' data/commit-folders.csv
# echo git commit -am "'Autocommit'"
# git commit -uno -am "'Autocommit'"
# echo git push origin master
# git push origin master
done < data/commit-folders.csv
本质上只是git add <folder>
用于 CSV 文件中的文件夹列表。我希望它更健壮,因为每次重新启动时,它都会从停止的地方重新启动。所以我添加了注释掉的行,它执行就地删除sed -i -e '1,1d' data/commit-folders.csv
。但是,while read line
如果它们被删除,它会与当前行混淆。所以我想知道如何正确地做到这一点。
如何在每一行上遍历 CSV 文件<path>
,并在成功添加 git 后删除路径。似乎您需要一个循环来从文件中选择第一行,然后将其从文件中删除,而不是使用while read line
.
解决方案
这里有一个没有 sed 的解决方案。
#!/bin/bash
csv="data/commit-folders.csv"
done="$(mktemp)"
# autoremove tempfile at exit
trap 'rm "$done"' EXIT
# loop over all lines in csv
while read -r file; do
printf "git add %s\n" "$file"
git add "$file"
# write processed files in tempfile
printf "%s\n" "$file" >> "$done"
#...
done < "$csv"
# create tempfile for merge result
newfile="$(mktemp)"
# sort: merge and sort $cvs with $done
# uniq -u: write only unique files into tempfile
sort "$csv" "$done" | uniq -u > "$newfile"
# override $csv with tempfile
mv "$newfile" "$csv"
推荐阅读
- swift - macOS Safari 内容阻止应用扩展中的上下文菜单
- ios - 从 iOS 项目调用时的领域异常
- amazon-web-services - Express lambda 从 api 调用返回 JSON
- java - 在命令设计模式中将上下文传递给执行方法
- php - 在 PHP 中将多索引 Excel 文件转换为数组
- javascript - 在页面上重新加载特定的 div 而不在 rails 中刷新页面
- python-2.7 - 如何在 python 2.7 中使用 selenium 模块打开 Web 浏览器?
- python - 如何将自定义标签/过滤器添加到现有的 Django 应用程序?
- python - 从python中的网页中提取所有表
- kubernetes - 当节点死亡/重新启动并具有 PersistentVolume 时的 StatefulSet 行为