我想删除第一个冒号 :
(含)之后的文本,或者什么都不替换。
例如,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
最佳答案
不太清楚期望的输出应该是什么,但这是我的解释,使用 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
使用庆典:
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 .
第三次更新,希望也是最后一次更新
使用 awk 的第三种解释:
$ 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 .
关于linux - 如何使用 awk 修改文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6304933/