我想帮助您只保留制表符分隔文件字段中任何字符串的第一个字母。
我认为sed可以做这个工作。我试过了,但我失败了。我希望得到你的建议和指示。
提前致谢。
一个虚拟的例子:
my_file,(制表符分隔)
1 11656 TCAG . TCAG TCAG . TCAG TCAG TCAG
1 11660 CT . CT CT . CT CT CT
1 11662 ATGG . ATGG ATGG . ATGG ATGG ATGG
1 11680 A . A A . A A A
1 11732 C . C C . C C T
1 11742 T . T C . T T T
我想要的是什么:
1 11656 T . T T . T T T
1 11660 C . C C . C C C
1 11662 A . A A . A A A
1 11680 A . A A . A A A
1 11732 C . C C . C C T
1 11742 T . T C . T T T
我测试的代码:
# (1) workable for only one string
echo abcd123 | sed 's/\([a-z]\).*/\1/'
# (2) not work for my data file
sed 's/\([a-z]\).*/\1/' my_file
sed 's/\([a-z]\).*/\1/g' my_file
答案 0 :(得分:3)
试试这个:
sed 's/\([ATGC]\)[ATGC]*/\1/g' my_file
当然,如果您使用的不仅仅是ATGC,请扩展两个字符集。
我相信你使用.*
的问题在于它会将所有字符带到行尾,只替换修改序列的第一次出现。通过使用第二个[ATGC]
,您可以将搜索字符串限制为仅包含这些序列。
答案 1 :(得分:2)
Manny的解决方案,但更通用
sed 's/\([A-Z]\)[A-Z]*/\1/g' my_file