2013-08-21 106 views
0

輸入是一個製表符分隔的文件(這裏空間,但不管):添加標籤的列到製表符分隔的文件

Sample1 ACGGGGCGCAGCAGGCGCGA text other122 
something ABCDSDDADASDASDSAD hjas 23823sss 
ahsdksads AHJHJDHSJHJDALKDLK hello world 

我想要做的是第一後添加標籤的列柱。所以基本上:

Sample1<TAB><TAB>ACGGGGCGCAGCAGGCGCGA<TAB>text<TAB>other122 
something<TAB><TAB>ABCDSDDADASDASDSAD<TAB>hjas<TAB>23823sss 
ahsdksads<TAB><TAB>AHJHJDHSJHJDALKDLK<TAB>hello<TAB>world 

SED/AWK首選,但無論不用..

回答

1

這個怎麼樣?

$ awk 'BEGIN{OFS=FS="\t"} $2="\t"$2' file 
Sample1   ACGGGGCGCAGCAGGCGCGA text other122 
something  ABCDSDDADASDASDSAD hjas 23823sss 
ahsdksads  AHJHJDHSJHJDALKDLK hello world 

這與awk 'BEGIN{OFS=FS="\t"} $1=$1"\t"'完全一樣。也就是說,它可以將一個選項卡附加到第一個字段的末尾或第二個字段的開頭。

而且

$ awk 'BEGIN{OFS=FS="\t"} $2=FS$2' file 
+0

這將每隔標籤轉換的外商投資企業到單一空間。設置FS和OFS。 –

+1

謝謝@EdMorton,剛剛添加了'BEGIN {OFS = FS =「\ t」}'。 – fedorqui

1
sed 's/<TAB>/<TAB><TAB>/' file 
0

既然你要對第一列後兩個標籤:

sed 's/\([^ \t]*\) \([^ \t]*\)/\1\t\2/g' foo.txt | sed 's/\t/\t\t/' 
0

您更改輸出字段分隔符的標籤,以及一個額外的標籤後的第一個元素:

awk -v 'OFS=\t' '$1=$1"\t"'

3

這可能爲你工作(GNU SED):

sed 's/\t/&&/' file 

或:

awk '{sub(/\t/,"&&")}1' file 
+0

不錯! +1 ......... –

0

純bash的解決方案:

filename='file.txt' 
tempFile="/tmp/my_script_$RANDOM" 
while read -r line; do 
    printf "%s\n" "${line//  }" >> "$tempFile" # should be ${line/<TAB>/<TAB><TAB>} 
done < "$filename" 
mv -f -- "$tempFile" "$filename" 
相關問題