仅保留制表符分隔文件的任何字段中字符串的第一个字母
我希望您能帮助我只保留制表符分隔文件字段中任何字符串的第一个字母。
我认为 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
I would like to having your helps on keeping only the first letter for any strings in fields of a tab-delimited file.
I think sed can do this job. I tried, but I failed. I expect to having your advice and directions.
Thanks in advance.
A dummy example:
my_file, (tab-delimited)
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
What I want:
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
Code I tested:
# (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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
试试这个:
当然,如果您使用的不仅仅是 ATGC,请扩展这两个字符集。
我相信您使用
.*
的问题是它将所有字符带到行尾,仅替换修改序列的第一次出现。通过使用第二个[ATGC]
,您可以将搜索字符串限制为仅这些序列。Try this:
Of course, if you're working with more than ATGC, expand on both character sets.
I believe your problem with using
.*
is that it will take all the characters to the end of the line, replacing only the first occurrence of your modified sequence. By using a second[ATGC]
, you're limiting your search string to just those sequences.曼尼的解决方案但更通用一些
Manny's solution but a bit more generic