2013-03-23 40 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