如何使用awk修改文本字段?

时间:2011-06-10 10:11:46

标签: linux perl unix sed awk

我想在第一个冒号:(包括)之后删除文本,或者将其替换为空。

例如,1:5:30应更改为1。我更喜欢使用awk脚本来完成这项工作。但我不知道该怎么做。你能告诉我任何指示吗?提前谢谢。

我的数据以制表符分隔,文件看起来像某些单元格中有点。

1       313     .       T       C       30.11        1:5:30  .       .       .
1       316     .       A       T       30.80        1:5:30  .       0:8:28  .
1       317     .       T       A       31.40        1:5:36  .       0:8:28  .

我尝试了以下内容,但是我对所有这些都失败了:

sed 's/:*:*//g' mydatafile
sed 's/:[0-9]:[0-9]//g' mydatafile

5 个答案:

答案 0 :(得分:4)

有点不清楚所需的输出应该是什么,但这是我的解释,使用sed

$ sed 's/:.*//' input
1   313 .   T   C   30.11   1
1   316 .   A   T   30.80   1
1   317 .   T   A   31.40   1

使用awk:

$ awk -F":" '{print $1}' input
1   313 .   T   C   30.11   1
1   316 .   A   T   30.80   1
1   317 .   T   A   31.40   1

使用剪切:

cut -d":" -f1 input

使用bash:

IFS=':'

while read a b; do
    echo $a
done < input

使用awk的替代解释:

$ awk 'BEGIN {OFS="\t"} {sub(/:.*/,"",$7); print}' input
1   313 .   T   C   30.11   1   .   .   .
1   316 .   A   T   30.80   1   .   0:8:28  .
1   317 .   T   A   31.40   1   .   0:8:28  .

第3次,希望最后一次更新

使用awk进行第3次解释:

$ awk 'BEGIN {OFS="\t"} {for (i=1;i<NF;i++){sub(/:.*/,"",$i)}; print}' input
1   313 .   T   C   30.11   1   .   .   .
1   316 .   A   T   30.80   1   .   0   .
1   317 .   T   A   31.40   1   .   0   .

答案 1 :(得分:3)

perl -p -e 's/:\d+:\d+//g' mydatafile

答案 2 :(得分:2)

试试这个:

sed 's/\([0-9][0-9]*\):[0-9][0-9]*:[0-9][0-9]*/\1/g' infile

sed 's/\([0-9]\{1,\}\):[0-9]\{1,\}:[0-9]\{1,\}/\1/g' infile

<强>输出

1       313     .       T       C       30.11        1  .       .       .
1       316     .       A       T       30.80        1  .       0  .
1       317     .       T       A       31.40        1  .       0  .

答案 3 :(得分:2)

这是使用sed的最短的一个:

sed -i.orig 's/\([0-9]\)*:[^ ]*/\1/g' inputfile

这会将原始文件的副本保留为inputfile.orig。并就地替换文件。

答案 4 :(得分:1)

这应该可以解决问题。

$ sed -e 's/:.*//' mydatafile
1       313     .       T       C       30.11        1
1       316     .       A       T       30.80        1
1       317     .       T       A       31.40        1

我认为sed比awk更容易解决这个问题。

Overview of Regular Expression Syntax

后来。 。

我从您的评论中看到您希望将{{1>}的x:y:z替换为<{1}}的其他答案。在那种情况下,我会使用这个awk程序。

x