2016-05-18 53 views
1

我想修改我的制表符分隔文件,如下所示。使用Bash脚本修改行上的特定列

原始文件

a001.2[tab]xxx[tab]001[tab]zz 
bbb[tab]ddd[tab]293[tab]kkjk 
c054.9[tab]ccc[tab]786[tab]qq 

修改文件

a001[tab]xxx[tab]001[tab]zz 
bbb[tab]ddd[tab]293[tab]kkjk 
c054[tab]ccc[tab]786[tab]qq 

我只想要使用bash脚本在第一列删除小数(例如:a001.2至A001)。
请让我知道该怎么做。
预先感谢您。

+0

你意思是';'s实际上是标签? – heemayl

+0

对不起,HTML标记不起作用。我修复了[tab]。感谢您的支持。 :-) –

+0

它是否必须是shell构造,或者你打开'sed','awk'等? – heemayl

回答

2

随着sed

sed -E 's/^([^\t]+)\.[^\t]+(.*)/\1\2/' file.txt 

如果文件不是很大,你可以使用bashwhile循环与参数扩展:

while IFS=$'\t' read i j; do echo "${i%%.*}"$'\t'"$j"; done <file.txt 

例子:

$ cat file.txt 
a001.2 xxx 001 zz 
bbb  ddd 293 kkjk 
c054.9 ccc 786 qq 

$ sed -E 's/^([^\t]+)\.[^\t]+(.*)/\1\2/' file.txt 
a001 xxx 001 zz 
bbb  ddd 293 kkjk 
c054 ccc 786 qq 

$ while IFS=$'\t' read i j; do echo "${i%%.*}"$'\t'"$j"; done <file.txt 
a001 xxx 001 zz 
bbb  ddd 293 kkjk 
c054 ccc 786 qq 
+0

太棒了!运作良好。你能解释一下命令行吗? –