sed在特定列中插入字符

时间:2013-10-28 22:38:47

标签: sed awk

任何人都可以告诉我如何将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会更好吗?

6 个答案:

答案 0 :(得分:16)

使用sed:

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

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

使用awk:

awk '{print "chr"$0}' file.in > file.out

答案 1 :(得分:3)

sed 's|^|chr|' file_in > file_out

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

答案 2 :(得分:1)

使用awk:

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

将更改存储回文件:

awk '{print "chr"$0}' file > tmp && mv tmp file

答案 3 :(得分:0)

sed 's/^\s*/chr/'

只是在你反对之前没有空白区域。如果你喜欢,不需要那个

答案 4 :(得分:0)

awk '{print "chr"$0}'

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

awk 'BEGIN { FS = "|";OFS="|"} {$97="chr"$0;print}' 

答案 5 :(得分: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,并且仍打印出该行的其余部分。