【发布时间】:2017-07-25 11:59:26
【问题描述】:
我有一个输入 CSV 文件:
1,5,1
1,6,2
1,5,3
1,7,4
1,5,5
1,6,6
1,6,7
我需要创建一个如下的字符串:
;5,1,3,5;6,2,6,7;7,4
所以每个字符,除了第一个是字段$2的值,在;之间的子字符串中的每个字符都表示中间字段的行号;例如;5,1,3,5 表示5 位于行号1,3,5。
我一直在尝试将 awk 与 gsub 一起使用,尝试动态创建字符串 MYSTR。
gsub 中的正则表达式不起作用。我需要一个匹配;$3($3 的值,可以是两位数)的正则表达式,并将其替换为;$3,RowNO,如果模式不匹配,则在末尾添加;$3字符串。
这是我目前所拥有的:
awk -F',' '{
print NR, $3;
noofchars=gsub(/;$3/,";"$3","NR,MYSTR);
print noofchars;
if ( noofchars == 1 )
;
else
MYSTR=MYSTR";"$3","NR;
print NR, $3;
print MYSTR;
}
END{print MYSTR;}' $1
【问题讨论】:
-
我对您的问题进行了一些编辑。您应该指定“不工作”的含义:会发生什么?你预计会发生什么?