簡體   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