2013-03-23 62 views
1

我存儲在一個txt文件中的列值的集合,標籤分離值

A13R 
W234H 
Q1H 

我要的是一個選項卡,第一個字符和最後一個字符分隔,這樣

東西
A "\t" 13 "\t" R 
W "\t" 234 "\t" H 

我嘗試和ofcourse失敗是

tr "" "\t" <test.txt>test2.txt 

你可以建議在bash的東西。

回答

3

能完成這項工作?

sed 's/^./&\t/;s/.$/\t&/' file 
+0

是的,它確實有效。 :) – Angelo 2013-03-23 17:25:13

+0

如果有人需要使用Perl(例如Windows)執行此操作,它將是'perl -pe's /^./$ &\t/; s /.$/ \ t $&/'file'。 (如果您希望它在原地修改文件,您可以添加['-i'](http://p3rl.org/perlrun)開關) – 2013-03-24 14:44:19

2

由於它被標記在你的問題,你可以用戶perl像:

perl -pi -e 's/(.)(.*)(.)/\1\t\2\t\3/' <in.txt> out.txt 

小心使用的輸入和輸出相同的文件中像你tr例子。請記住,在執行命令之前,您的shell將打開之前的輸入和輸出文件。輸出文件是破損,所以當你的命令運行時,它會發現一個空文件。有些工具可以解決這個問題,比如sponge,但使用兩個不同的文件名就很容易。

2

Pure Bash;使用子字符串擴展:

while read line ; do 
    echo -e "${line:0:1}\t${line:1:-1}\t${line: -1:1}" 
done < data.txt