Как использовать «sed» для поиска и замены значений в файле TSV? - PullRequest
1 голос
/ 21 июня 2019

В настоящее время я работаю с большим файлом .tsv.gz, который содержит два столбца, которые выглядят примерно так:

xxxyyy  408261
yzlsdf  408260null408261
zlkajd  408258null408259null408260
asfzns  408260

Что я хотел бы сделать, это найти все строки, которые содержат «ноль»"и заменить его запятой", ".Чтобы результат выглядел так:

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 голосов
/ 21 июня 2019

Попробуйте:

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
...