如何用AWK将匹配特定模式的行移至文件末尾
用AWK实现将指定行移至文件末尾
需求说明
需要将文件中所有以37M1|5|开头的行移动到文件末尾,其余行保持原有顺序。
输入示例
37M1|5|189| 37M1|5|190| 37M1|2|150| ABC|AAA|BBBB ABC1|AAB|BBBC 37M1|5|191| 37M1|3|111| BBC1|AAB|BFBC BBC2|AAA|BFBC 37M1|5|192|
期望输出
37M1|2|150| ABC|AAA|BBBB ABC1|AAB|BBBC 37M1|3|111| BBC1|AAB|BFBC BBC2|AAA|BFBC 37M1|5|192| 37M1|5|189| 37M1|5|190| 37M1|5|191|
AWK实现命令
awk '/^37M1\|5\|/{a[++n]=$0; next} {print} END{for(i=1;i<=n;i++) print a[i]}' input.txt
命令解释
/^37M1\|5\|/:匹配以37M1|5|开头的行(|是正则元字符,需用\转义){a[++n]=$0; next}:将匹配到的行存入数组a,跳过后续操作直接处理下一行{print}:对不匹配的行直接输出,保留原有顺序END{for(i=1;i<=n;i++) print a[i]}:处理完所有行后,遍历数组输出所有暂存的目标行
如果需要直接修改原文件,可结合临时文件实现:
awk '/^37M1\|5\|/{a[++n]=$0; next} {print} END{for(i=1;i<=n;i++) print a[i]}' input.txt > tmp.txt && mv tmp.txt input.txt
内容的提问来源于stack exchange,提问作者Abou Ilyès
相关产品推荐
相关产品推荐

