我的文件看起来像这样:
('chr1', '1499102', '1500297')
('chr1', '1811177', '1812131')
('chr1', '2312420', '2313646')
('chr1', '6683999', '6684724')
N行。
我想像这样打印:
chr1 (tab) 1499102 (tab) 1500297
任何一个衬垫外壳或python或perl。
答案 0 :(得分:8)
perl -nE '$,="\t"; say eval' file.txt
利用perl的输出记录分隔符$,
来提供选项卡。 eval
应该可以安全地用于单引号字符串,并且可能是最佳选择。
答案 1 :(得分:4)
使用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)))
(here是ast.literal_eval()
)的文档
答案 2 :(得分:4)
Perl one-liner在这里^ _ ^
cat file.txt | perl -ni -e "printf qq{%s\t%s\t%s\n}, m/'([^']+)'/g;"
答案 3 :(得分:3)
perl -pe "s/\('(.*)', \'([0-9]*)', '([0-9]*)'\)/$1\t$2\t$3/g" yourfile
为我做了伎俩
答案 4 :(得分:2)
sed / awk也会为你工作吗?
awk '{print $1"\t"$2"\t"$3}' your_file_with_stuff_in_it | sed "s/[')(,]//g"
答案 5 :(得分:2)
awk -F "'" 'BEGIN {OFS="\t"} {print $2, $4, $6}' FILE