仅保留制表符分隔文件的任何字段中字符串的第一个字母

发布于 2024-11-27 01:13:04 字数 975 浏览 0 评论 0原文

我希望您能帮助我只保留制表符分隔文件字段中任何字符串的第一个字母。

我认为 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

压抑⊿情绪 2024-12-04 01:13:04

试试这个:

sed 's/\([ATGC]\)[ATGC]*/\1/g' my_file

当然,如果您使用的不仅仅是 ATGC,请扩展这两个字符集。

我相信您使用 .* 的问题是它将所有字符带到行尾,仅替换修改序列的第一次出现。通过使用第二个 [ATGC],您可以将搜索字符串限制为仅这些序列。

Try this:

sed 's/\([ATGC]\)[ATGC]*/\1/g' my_file

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.

一袭白衣梦中忆 2024-12-04 01:13:04

曼尼的解决方案但更通用一些

sed 's/\([A-Z]\)[A-Z]*/\1/g' my_file

Manny's solution but a bit more generic

sed 's/\([A-Z]\)[A-Z]*/\1/g' my_file
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文