sed在特定列中插入字符

sed在特定列中插入字符,sed,awk,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

谁能告诉我如何在第一列的每个字符中插入
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是否更好?

与sed结合使用:

sed 's/^/chr/' file.in > file.out
您不需要
-i
-标志,因为您没有覆盖输入文件file.in

使用awk:

awk '{print "chr"$0}' file.in > file.out
awk '{print "chr"$0}' file 
这将在每行(
^
)的开头进行替换(
s
),并将其替换为字符“chr”。管道(
|
)只是分离器。

带awk:

awk '{print "chr"$0}' file.in > file.out
awk '{print "chr"$0}' file 
要将更改存储回文件,请执行以下操作:

awk '{print "chr"$0}' file > tmp && mv tmp file
只是为了确保在你反对之前没有空白。如果您是sur of,则不需要

awk '{print "chr"$0}'
适用于所讨论的文件,因为没有字段分隔符。对于这种情况,您可以使用(例如,对于管道分隔文件):

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

$awk'$1=“chr”$1{print}文件.in
chr1 34566 34765
CHR24567845789
chr3 34567 34799
chrX 67895 66900
chrY 34567 34890


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

为什么使用
&&
而不是
以及为什么要使用tmp文件?使用
&&
可确保仅在上一个命令成功时才覆盖该文件。您不能执行
命令文件>文件
,这称为
关闭
,外壳将首先清空文件,这意味着您将留下一个空文件。我理解关闭部分。但与
命令文件>tmp的唯一区别是:;mv tmp文件
命令文件>tmp&&mv tmp文件
是当awk无法成功时,我从前者收到的错误消息吗?如果标题将您带到这里是因为您希望替换非第一列的某个特定列,使用一个正则表达式,使一个组从行首开始并匹配任何字符的特定数字,如:
echo internal | sed'1s/^\(.\{5\}\)/\1natio/'
,它在第一行将internal转换为international。
awk 'BEGIN { FS = "|";OFS="|"} {$97="chr"$0;print}'