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

时间:2011-07-29 02:18:26

标签: unix sed awk

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

我认为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

2 个答案:

答案 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