【发布时间】:2017-06-16 20:49:00
【问题描述】:
我正在尝试使用 awk 来格式化包含多行的文件。
文件内容:
ABC;0;1
ABC;0;0;10
ABC;0;2
EFG;0;1;15
HIJ;2;8;00
KLM;4;18;12
KLM;6;18;1200
KLM;10;18;14
KLM;1;18;15
想要的结果:
ABC;0;1;10;2
EFG;0;1;15
HIJ;2;8;00
KLM;4;18;12;1200;14;15
我正在使用下面的代码:
awk -F ";" '{
ligne= ligne $0
ma_var = $1
{getline
if($1 != ma_var){
ligne= ligne "\n" $0
}
else {
ligne= ligne";"NF
}
}
}
END {
print ligne
} ' ${FILE_IN} > ${FILE_OUT}
objectif是将下一行的第一列与当前行的第一列进行比较,如果匹配则将下一行的最后一列添加到当前行,并删除下一行,否则打印下一行行。
亲切的问候,
【问题讨论】:
-
awk -F ";" '{if (a[$1]=="") a[$1]=$0; else a[$1]=a[$1]";"$NF} END{for(i in a) print a[i]}' file -
if (a[$1]=="") a[$1]=$0; else a[$1]=a[$1]";"$NF=a[$1]=(a[$1]=="" ? $0 : a[$1] FS $NF)。只是冗余略少。显然,这种方法会将整个文件读入内存并以随机顺序输出行,但也许没关系。恕我直言,您应该将其发布为答案。 -
输入文件是否排序?当最后一行的第一个字段与第一行匹配时,是否要追加最后一个字段?