sed - 如何使用“sed”在 tsv 文件中查找和替换值?
问题描述
我目前正在处理一个包含两列的大型 .tsv.gz 文件,如下所示:
xxxyyy 408261
yzlsdf 408260null408261
zlkajd 408258null408259null408260
asfzns 408260
我想做的是找到所有包含“null”的行并将其替换为逗号“,”。所以结果看起来像这样:
xxxyyy 408261
yzlsdf 408260,408261
zlkajd 408258,408259,408260
asfzns 408260
我曾尝试使用以下命令,但没有奏效:
sed -i 's/null/,/g' 46536657_1748327588_combined_copy.tsv.gz
解压缩文件并再次尝试也不适用于 tsv 文件。
我还尝试在文本编辑器中打开解压缩文件以手动查找和替换。但是文件太大,会崩溃。
解决方案
尝试:
zcat comb.tsv.gz | sed 's/null/,/g' | gzip >new_comb.tsv.gz && mv new_comb.tsv.gz comb.tsv.gz
因为这避免了一次解压缩文件,所以应该节省内存。
例子
让我们从这个示例文件开始:
$ zcat comb.tsv.gz
xxxyyy 408261
yzlsdf 408260null408261
zlkajd 408258null408259null408260
asfzns 408260
接下来,我们运行我们的命令:
$ zcat comb.tsv.gz | sed 's/null/,/g' | gzip >new_comb.tsv.gz && mv new_comb.tsv.gz comb.tsv.gz
通过查看输出文件,我们可以看到进行了替换:
$ zcat comb.tsv.gz
xxxyyy 408261
yzlsdf 408260,408261
zlkajd 408258,408259,408260
asfzns 408260
推荐阅读
- python - google colab 的 GPU 是否适用于 tensorflow 1.0.0?
- docker - 了解 docker 容器进程
- python - 编写一个程序,在数字列表中找到最大的元素,并用最后一个元素切换索引位置
- python - Python 3.x tkinter 拖放防止菜单可点击?
- c# - 路由前缀可以被覆盖
- python - 将列从其他 DataFrame 添加到 DataFrame 而没有交集
- airflow - 如何在 Airflow 中查找失败的上游任务数?
- python - 在熊猫读取csv中保存跳过行
- go - Golang 时间(以分秒为单位)
- javascript - Azure SDK for Node - Key Vault Management - CORS preflight:服务器响应状态为 400(错误请求)