[英]unable to convert tab delimited .txt file to csv
我正在使用tr将制表符分隔的.txt文件转换为逗号分隔的csv文件。 这是我的文件输出
arron@arron-Ideapad-Z570 ~/Phd $ cat test_pph_s.txt | cut -f 1,2,3
#o_acc o_pos o_aa1
ENSG00000145888 455 H
ENSG00000145888 450 R
ENSG00000145888 440 M
ENSG00000145888 428 R
ENSG00000145888 428 R
这是完整的文件链接https://drive.google.com/file/d/0B0iDswLYaZ0zV3ktekhyeGxwTlk/view?usp=sharing
并尝试使用tr将空格换成逗号:
arron@arron-Ideapad-Z570 ~/Phd $ cat test_pph_s.csv | cut -f 1,2,3 | tr "\\t" ","
#o_acc , o_pos,o_aa1
ENSG00000145888 , 455, H
ENSG00000145888 , 450, R
ENSG00000145888 , 440, M
ENSG00000145888 , 428, R
ENSG00000145888 , 428, R
它似乎只是在其中添加逗号而不删除空格。
但是我注意到,如果我在libreoffice中打开.txt文件并另存为.csv,它将转换为utf8格式,然后运行
arron@arron-Ideapad-Z570 ~/Phd $ cat test_pph_s.csv | cut -f 1,2,3 | tr "\\t" ","
给我
#o_acc,o_pos,o_aa1
ENSG00000145888,455,H
ENSG00000145888,450,R
ENSG00000145888,440,M
ENSG00000145888,428,R
ENSG00000145888,428,R
这就是我想要的。
我第一次尝试做错了什么? 在我看来,使用tr并不是转换为.csv文件的“正确”方法。
谢谢。
看来您混用了制表符和空格
cut -f 1,2,3 < input.txt | tr -s [:blank:] ','
tr
会将所有空白折叠为一个字符,然后将其替换为逗号。 您也不需要cat
,但是如果您喜欢cat
,可以使用它:)
我无法使用iconv复制以在ascii和utf8之间转换。 我不确定libreoffice在做什么,因为您在每个记录的开头都得到了多余的字符。 尝试使用awk完成相同的操作,看看它是否具有更好的成功:
awk -F'\t' 'BEGIN {OFS=","} {print $1, $2, $3}' test_pph_s.csv
这是用制表符分隔的文件-F'\\t'
并输出以逗号分隔的OFS=','
一个带有while read
循环的简单bash脚本可以对其进行简单处理。 在这里,您只需从文件中读取所有数据字段,然后输出您感兴趣的字段,并用逗号分隔。 第一个参数是要读取的文件名(只是默认为您的测试文件)。 如果愿意,还可以包含第二个参数,该参数传递输出文件名,并将输出重定向到该文件名。 下面的脚本仅使用字段名称作为变量来保存每个字段的读取值,然后输出所请求的值(您可以使用所需的任何变量名称,我发现保留字段名称更加容易):
#!/bin/bash
fn="${1:-dat/test_pph_s.txt}"
while read o_acc o_pos o_aa1 o_aa2 rsid acc pos aa1 aa2 prediction pph2_prob pph2_FPR pph2_TPR ||
[ -n "$pph2_TPR" ]; do
printf "%s,%s,%s\n" "$o_acc" "$o_pos" "$o_aa1"
done <"$fn"
exit 0
输出:
$ bash tab2csv.sh
#o_acc,o_pos,o_aa1
ENSG00000145888,455,H
ENSG00000145888,450,R
ENSG00000145888,440,M
ENSG00000145888,428,R
ENSG00000145888,428,R
ENSG00000145888,413,R
ENSG00000145888,412,M
ENSG00000145888,406,S
ENSG00000145888,402,P
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.