我有以下文本文件:
$ cat file.txt
# file;GYPA;Boston
Josh 81-62 20
Mike 72-27 1;42;53
Allie 71-27 24;12
我想通过以下方式将GYPA添加到第三列的每个元素:
GYPA:20
GYPA:1;GYPA:42;GYPA:53
GYPA:24;GYPA:12
到目前为止,我有
猫猫
NR==1 {
FS=";"; Add=$2
}
{
FS="\t"; split($3,a,";");
for (i in a) {
print Add":"a[i]
}
}
数组部分不起作用。
假设&
您要添加的前缀字符串中没有反向引用(例如)或转义字符:
$ awk -F';' 'NR==1{add=$2":"; FS=" "; next} {gsub(/(^|;)/,"&"add,$3); print $3}' file
GYPA:20
GYPA:1;GYPA:42;GYPA:53
GYPA:24;GYPA:12
"&"
现在那是一个金块,我不知道awk
会不会像sed
... 一样。谢谢。您能解释一下
"
s的作用&
是什么?我的理解是,&
要么是空字符串(^
匹配的开头$3
),要么是;
;add
是第二个标头,后跟:
。但是为什么要用那两个"
?的第二个参数
gsub()
是一个字符串。"&"and
是将字符串"&"
与变量的值连接时得到的字符串and
。的"
s为只是字符串分隔符-&
单独将是一个AWK语言符号而"&"
是包含字符的字符串&
,其用于从所述第一ARG在第二arg的至GSUB上下文整个匹配的字符串反向引用()。在每一个方式,
&
是不是一个awk变量-在它自己的作为&
它的一个符号并在"&"
字符串中的字符。是的,add
是awk变量。不知道您要在那里做什么。
^.
意味着any character at the start of a string
-您似乎不太可能想用任何东西代替它。如果您需要帮助,请使用其自己的示例输入/输出询问一个新问题。