免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2166 | 回复: 6
打印 上一主题 下一主题

[文本处理] 求助大神一个 csh foreach 二次循环的问题 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:01:44
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2020-01-06 17:33 |只看该作者 |倒序浏览
本帖最后由 黑王子的白马 于 2020-01-07 10:24 编辑

首先感谢一下同意加我好友的大神,否则发不了贴啊。。。。

需求如下:
#/bin/csh -f
A 文件内容如下:

11 aa
22 bb
33 cc
44 dd
...  ...

cat A | awk '{print $1}' >a1
cat A | awk '{print $2}' >a2

foreach 1 ( cat a1)
set x =$1
foreach 2 (cat a2)
set y = $2

command xxx $1 YYY $2


最终需要得到结果如下:

command xxx 11 YYY aa
command xxx 22 YYY bb
command xxx 33 YYY cc
...
-----------------------------------------------

大概需求如上,因为公司不能系统和windows 互传数据,所以大概敲的描述。我知道这样写不对,因为这样写相当于大循环下套小循环, 试过用for 不知道是公司系统问题还是怎么的如下的for 语句csh不识别,只能在bash 下实现,但是主体脚本全部是用csh 写的,也试过了调用脚本但是发现不能互相调用变量,所以想还是最好能用foreach在csh里实现,读起来容易后人维护也方便。

bash 下写的思路大概是先while 语句读取a1 a2 内容赋值变量,因为发现不先用while 语句 会在for 时 输出都是空格,
for (( i=0; i<xxx;( 这段先给了固定值,因为发现i<${#a[@]} 居然不识别报语法错后来先while直接用cnt 就可以)++i))
do
echo " ${a1[$i}  ..${a2[$i]}"
done
工作中脚本使用需求量不大,自己也非常的业余, 被折磨了两天了,想了很多办法也参考了楼里前辈的经验同事也帮写了一个其他语言的,但是调用维护不便。
求助各位大神不吝赐教,感激涕零




论坛徽章:
0
2 [报告]
发表于 2020-01-07 17:00 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
10
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:4115-16赛季CBA联赛之深圳
日期:2020-05-31 16:13:5615-16赛季CBA联赛之同曦
日期:2020-01-28 12:42:47每日论坛发贴之星
日期:2016-08-09 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-04 06:20:0015-16赛季CBA联赛之佛山
日期:2021-02-26 09:33:41
3 [报告]
发表于 2020-01-07 21:26 |只看该作者
我解决这个问题的思路是这样的,不在命令行内解决这些,首先利用awk生成命令语句完后放在文件里,然后去执行文件里的命令,如下

root@lp:~/jw/bash# cat A
11 aa
22 bb
33 cc
44 dd
root@lp:~/jw/bash# cat A|awk '{print "command xxx "$1" YYY "$2}'
command xxx 11 YYY aa
command xxx 22 YYY bb
command xxx 33 YYY cc
command xxx 44 YYY dd
root@lp:~/jw/bash# cat A|awk '{print "command xxx "$1" YYY "$2}' > xx.sh
root@lp:~/jw/bash# sh xx.sh
xx.sh: 1: xxx: not found
xx.sh: 2: xxx: not found
xx.sh: 3: xxx: not found
xx.sh: 4: xxx: not found

论坛徽章:
10
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:4115-16赛季CBA联赛之深圳
日期:2020-05-31 16:13:5615-16赛季CBA联赛之同曦
日期:2020-01-28 12:42:47每日论坛发贴之星
日期:2016-08-09 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-04 06:20:0015-16赛季CBA联赛之佛山
日期:2021-02-26 09:33:41
4 [报告]
发表于 2020-01-07 21:26 |只看该作者
我解决这个问题的思路是这样的,不在命令行内解决这些,首先利用awk生成命令语句完后放在文件里,然后去执行文件里的命令,如下

root@lp:~/jw/bash# cat A
11 aa
22 bb
33 cc
44 dd
root@lp:~/jw/bash# cat A|awk '{print "command xxx "$1" YYY "$2}'
command xxx 11 YYY aa
command xxx 22 YYY bb
command xxx 33 YYY cc
command xxx 44 YYY dd
root@lp:~/jw/bash# cat A|awk '{print "command xxx "$1" YYY "$2}' > xx.sh
root@lp:~/jw/bash# sh xx.sh
xx.sh: 1: xxx: not found
xx.sh: 2: xxx: not found
xx.sh: 3: xxx: not found
xx.sh: 4: xxx: not found

论坛徽章:
0
5 [报告]
发表于 2020-01-07 23:06 |只看该作者
  1. cat file
  2. 11 aa
  3. 22 bb
  4. 33 cc
  5. 44 dd

  6. awk '{cmd=sprintf("echo xxx %s yyy %s", $1, $2);system(cmd)}' file
  7. xxx 11 yyy aa
  8. xxx 22 yyy bb
  9. xxx 33 yyy cc
  10. xxx 44 yyy dd
复制代码

评分

参与人数 1可用积分 +10 收起 理由
飘絮絮絮丶 + 10 赞一个!

查看全部评分

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:01:44
6 [报告]
发表于 2020-01-08 12:19 |只看该作者
回复 3# ll104567



因为command XX $1 YY $2 命令后还有一大串的命令要接着执行,本想用循环里直接执行结束了在运行第二轮,实在foreach 不能够,这样awk 也是极好了,非常感谢

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:01:44
7 [报告]
发表于 2020-01-08 12:25 |只看该作者
回复 5# jzsjm1002

如果foreach 实现不了这样awk处理了再做操作也可,非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP