微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

转换列模式

我有这样的文件

1 0 1 2 0 3 2 1 2 3 0 3 4 0 1 4 1 1 4 2 1 4 3 1 5 0 1 8 0 1 10 0 1 11 0 1

RS分隔符认为空行。

如果有两条空白线,我们不得不以$1 0 0的模式替代它们,其中$1表示$1 0 *logging之前增加的“数字”。

如果分隔符是empty line + 1 empty line我们必须增加1美元。如果分隔符是empty line + 2 empty line我们必须增加1美元2. …

如何使用多个(嵌套)分隔符从文本中提取值

强制从cut命令输出字段的顺序

需要将下面的awk命令转换成sed

脚本,UNIX,比较

我如何在Perl中使用粘贴和awk?

我需要得到这个输出

1 0 1 2 0 3 2 1 2 3 0 3 4 0 1 4 1 1 4 2 1 4 3 1 5 0 1 6 0 0 7 0 0 8 0 1 9 0 0 10 0 1 11 0 1

提前致谢!

Shell脚本 – 将xml分成多个文件

如何使用AWK从string中删除所有小写字符?

从UTC转换到时代shell脚本或awk

awk:致命:无法打开文件“(无此文件或目录)

如何删除基于列值的重复行?

你可以尝试这样的事情。 这种方式的好处是你的输入文件不需要有一个空行缺少的数字。

awk -v RS="" -v ORS="nn" -v OFS="n" ' BEGIN{getline; col=$1;line=$0;print line} $1==col{print $0;next } ($1==col+1){print $0;col=$1;next} {x=$1;y=$0; coL++; while (col < x) {print col" 0 0";coL++};print y;next}' file

输入文件

[jaypal:~/Temp] cat file 1 0 1 2 0 3 2 1 2 3 0 3 4 0 1 4 1 1 4 2 1 4 3 1 5 0 1 8 0 1 10 0 1 11 0 1

脚本输出

[jaypal:~/Temp] awk -v RS="" -v ORS="nn" -v OFS="n" ' BEGIN{getline; col=$1;line=$0;print line} $1==col{print $0;next } ($1==col+1){print $0;col=$1;next} {x=$1;y=$0; coL++; while (col < x) {print col" 0 0";coL++};print y;next}' file 1 0 1 2 0 3 2 1 2 3 0 3 4 0 1 4 1 1 4 2 1 4 3 1 5 0 1 6 0 0 7 0 0 8 0 1 9 0 0 10 0 1 11 0 1

awk 'NF{f=0;n=$1;print;next}f{print ++n " 0 0"}{print;f=1}' ./infile

产量

$ awk 'NF{f=0;n=$1;print;next}f{print ++n " 0 0"}{print;f=1}' ./infile 1 0 1 2 0 3 2 1 2 3 0 3 4 0 1 4 1 1 4 2 1 4 3 1 5 0 1 6 0 0 7 0 0 8 0 1 9 0 0 10 0 1 11 0 1

说明

NF{f=0;n=$1;print;next} :如果当前行有数据,取消设置标志f ,将第一个字段中的数字保存为n ,打印该行并跳过脚本的其余部分

{print;f=1} :如果当前行是空白的,我们只能达到这个动作。 如果是这样,打印行并设置标志f

f{print ++n " 0 0"} :我们只执行这个动作,如果标志f被设置,只有当前一行是空白时才会发生。 如果我们输入这个动作,用一个递增的n打印缺少的字段

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐