6

谁能告诉我如何插入chr第一列中的每个字符。

文件在

1 34566 34765    
2 45678 45789
3 34567 34799
X 67895 66900
Y 34567 34890

归档

chr1 34566 34765
chr2 45678 45789
chr3 34567 34799
chrX 67895 66900
chrY 34567 34890

我不知道如何sed -i应用到特定列。我对语法不好,所以如果你能分解你的解释,我将不胜感激。另外,为此使用 awk 会更好吗?

4

6 回答 6

17

使用 sed:

sed 's/^/chr/' file.in > file.out

您不需要-i-flag,因为您没有覆盖输入文件file.in

使用 awk:

awk '{print "chr"$0}' file.in > file.out
于 2013-10-28T22:42:34.977 回答
3
sed 's|^|chr|' file_in > file_out

这会s在每行 ( ) 的开头进行替换 ( ^) 并将其替换为字符“chr”。管道 ( |) 只是分隔符。

于 2013-10-28T22:42:44.527 回答
1

使用 awk:

awk '{print "chr"$0}' file 

要将更改存储回文件:

awk '{print "chr"$0}' file > tmp && mv tmp file
于 2013-10-28T22:43:15.637 回答
0
sed 's/^\s*/chr/'

只是为了确保在您反对之前没有空白。如果你是 sur of,则不需要 th \s

于 2013-11-03T15:19:37.417 回答
0
awk '{print "chr"$0}'

适用于有问题的文件,因为没有字段分隔符。对于这种情况,您可以使用(例如,对于管道分隔文件):

awk 'BEGIN { FS = "|";OFS="|"} {$97="chr"$0;print}' 
于 2016-09-27T16:22:12.063 回答
0

$ cat file.in 1 34566 34765 2 45678 45789 3 34567 34799 X 67895 66900 Y 34567 34890

$ awk '$1="chr"$1 {print}' file.in chr1 34566 34765 chr2 45678 45789 chr3 34567 34799 chrX 67895 66900 chrY 34567 34890

本质上,无论第 1 列之前是否有空格,您都将“chr”$1 的值重定向回 $1,并且仍然打印出该行的其余部分。

于 2017-07-25T05:23:42.337 回答