繁体   English   中英

无法将制表符分隔的.txt文件转换为csv

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM