0
希望世界上有人可以帮助我,以及遇到类似问题的其他人,找到一个简单的解决方案来捕获数据。我已经花了几个小时尝试使用一个线性脚本来解决我认为是一个简单的问题,涉及awk,一个csv文件并将输出另存为bash变量。简而言之,这就是坚果...
任务:
1)从LAST COLUMN开始,每隔一列输出特定的迭代计数。
2)要输出每隔一列,从NEXT到LAST COLUMN开始,具有特定的迭代计数。
数据(file.csv):
@12@SayWhat@2@4@2.25@3@1.5@1@1@1@3.25
@7@Smarty@9@6@5.25@5@4@4@3@2@3.25
@4@IfYouLike@4@1@.2@1@.5@2@1@3@3.75
@3@LaughingHard@8@8@13.75@8@13@6@8.5@4@6
@10@AtFunny@1@3@.2@2@.5@3@3@5@6.5
@8@PunchLines@7@7@10.25@7@10.5@8@11@6@12.75
任务1的预期结果:
2@2.25@1.5@1@3.25
9@5.25@4@3@3.25
4@.2@.5@1@3.75
8@13.75@13@8.5@6
1@.2@.5@3@6.5
7@10.25@10.5@11@12.75
任务2的预期结果:
SayWhat@4@3@1@1
Smarty@6@5@4@2
IfYouLike@1@1@2@3
LaughingHard@8@8@6@4
AtFunny@3@2@3@5
PunchLines@7@7@8@6
当然,有更优雅的方法可以做到这一点,但我并不是一个真正的awk人:
第1部分:
awk -F@ '{ x = ""; for (f = NF; f > (NF - 5 * 2); f -= 2) { x = x ? $f "@" x : $f ; } print x }' file.csv
输出:
2@2.25@1.5@1@3.25
9@5.25@4@3@3.25
4@.2@.5@1@3.75
8@13.75@13@8.5@6
1@.2@.5@3@6.5
7@10.25@10.5@11@12.75
第2部分:
awk -F@ '{ x = ""; for (f = NF - 1; f > (NF - 5 * 2); f -= 2) { x = x ? $f "@" x : $f ; } print x }' file.csv
输出:
1. SayWhat@4@3@1@1
Smarty@6@5@4@2
IfYouLike@1@1@2@3
LaughingHard@8@8@6@4
AtFunny@3@2@3@5
PunchLines@7@7@8@6
5```
每一个中的文字都是您的“迭代次数”。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。