Удаление разделителей - PullRequest
       4

Удаление разделителей

2 голосов
/ 07 октября 2011

У меня есть файл, похожий на этот:

('chr1', '1499102', '1500297')
('chr1', '1811177', '1812131')
('chr1', '2312420', '2313646')
('chr1', '6683999', '6684724')

N количество строк.

Я хочу напечатать его так:

chr1 (tab) 1499102 (tab) 1500297

Любойвкладыш оболочки или питон или перл.

Ответы [ 6 ]

8 голосов
/ 07 октября 2011
perl -nE '$,="\t"; say eval' file.txt

Использование разделителя выходных записей perl, $, для предоставления вкладок.eval должен быть безопасным для использования в строках, заключенных в одинарные кавычки, и, вероятно, является лучшим вариантом.

4 голосов
/ 07 октября 2011

Perl с одним вкладышем здесь ^ _ ^

cat file.txt | perl -ni -e "printf qq{%s\t%s\t%s\n}, m/'([^']+)'/g;"
4 голосов
/ 07 октября 2011

с использованием Python:

for line in open('filename'): print('%s\t%s\t%s'%(eval(line)))

(конечно, вам нужно передать этот однострочный скрипт на языке python интерпретатору python: python -c "...")

функция eval() небезопасна и должна считаться «злой», если вы собираетесь обрабатывать через нее непроверенный пользовательский ввод. если эта функция представляет для вас реальную угрозу, вы можете использовать эту версию, которая гораздо более ограничительна при вводе:

import ast
for line in open('filename'):
    print('%s\t%s\t%s'%(ast.literal_eval(line)))

( здесь - документация для ast.literal_eval())

3 голосов
/ 07 октября 2011
perl -pe "s/\('(.*)', \'([0-9]*)', '([0-9]*)'\)/$1\t$2\t$3/g" yourfile

сделал трюк для меня

2 голосов
/ 07 октября 2011
awk -F "'" 'BEGIN {OFS="\t"} {print $2, $4, $6}' FILE
2 голосов
/ 07 октября 2011

Будет ли у вас работать sed / awk?

awk '{print $1"\t"$2"\t"$3}' your_file_with_stuff_in_it | sed "s/[')(,]//g"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...