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}'