从单个列中提取字符串并在之前和之后添加字符串

时间:2014-01-16 16:59:25

标签: bash sed awk

我有一个带有2个空格分隔字符串的文本文件(我喜欢查看这个带有2列的文件)和数百万行。 我需要在第2列中编写字符串,并在提取的字符串之前和之后添加另一个字符串。 例: 原始文件如下所示:

id position
1 37474
2 4883
etc etc

我需要制作另一个看起来像这样的文件:

chr:37474-37474
chr:4883-4883
etc

即。编写chr:并将字符串附加到原始文件的第二列,两次在“-”之间。

我知道如何从原始文件的第二列中提取字符串并将其写入新文件,但我不知道如何执行上面显示的操作。有谁可以帮帮我。

4 个答案:

答案 0 :(得分:1)

awk可以是一种方式:

$ awk '{printf "chr:%s-%s\n",$2,$2}' file
chr:position-position
chr:37474-37474
chr:4883-4883
chr:etc-etc
  • {printf "chr:%s-%s\n",$2,$2}打印“chr:”+第二个字段两次。

如果您不需要第一行,可以在NR>1块之前使用{},以便不会对其进行处理。

答案 1 :(得分:0)

sed -r 's/.* (.*)/chr:\1-\1/' file

或没有-r

sed 's/.* \(.*\)/chr:\1-\1/' 

会做:

kent$  echo "1 37474
2 4883
etc etc"|sed -r 's/.* (.*)/chr:\1-\1/'
chr:37474-37474
chr:4883-4883
chr:etc-etc

答案 2 :(得分:0)

这应该做:

awk 'NR>1 {print "chr:"$2"-"$2}' file
chr:37474-37474
chr:4883-4883

答案 3 :(得分:0)

原始文件有标题,这是解决方案:

使用awk

awk 'NR>1{printf "chr:%s-%s\n",$2,$2}' file

使用sed

sed -rn '/[0-9]/ s/.* (.*)/chr:\1-\1/p' file