如何使用“ sed”在tsv文件中查找和替换值?

时间:2019-06-21 04:58:02

标签: sed command-line

我目前正在使用一个大型.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文件。

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

1 个答案:

答案 0 :(得分:0)

尝试:

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