首页 > 解决方案 > 如何使用“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 文件。

我还尝试在文本编辑器中打开解压缩文件以手动查找和替换。但是文件太大,会崩溃。

标签: sedcommand-line

解决方案


尝试:

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

推荐阅读