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