免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk怎么把字符串拼接变量名进行赋值 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-03-22 11:43 |只看该作者 |倒序浏览
echo "" | awk -F"|" -v upd1="aaa" '{i=1;print "'"upd"'"'i' }'
怎么把aaa输出来?需要把字符串拼接成变量upd1进行输出upd1的值。

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
2 [报告]
发表于 2016-03-22 13:25 |只看该作者
  1. $ i=1
  2. $ echo "" | awk -F"|" -v upd1="aaa" '{print '`echo "upd$i"`'}'
  3. aaa
复制代码
只能将变量i设在shell里,然后在awk中插入shell代码。
你一楼大括号里的引号无比繁琐,归根结底还是 这个意思:    '{i=1;print "upd"i }' @yangjavine

论坛徽章:
0
3 [报告]
发表于 2016-03-22 13:50 |只看该作者
回复 2# cao627

如果i放awk里面,那就没其他办法了是吧,必须放外边?

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2016-03-22 13:58 |只看该作者
回复 3# yangjavine

1. 说说真正问题...

2. array 数组
   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
5 [报告]
发表于 2016-03-22 14:12 |只看该作者
echo "" | awk -F"|" -v upd1="aaa" '{print '`i=1;echo upd$i`'}'

i放在awk里面,但归根结底还是在shelll里。@yangjavine

论坛徽章:
0
6 [报告]
发表于 2016-03-22 14:15 |只看该作者
回复 4# jason680


echo "" | awk -F"|" -v upd1="aaa" -v upd2="ccc"  '{i=1;print "upd"i }'


问题就是:i是变化的,如果i=1,我要把i和upd合并成upd1,在awk里输出aaa;如果i=2,我就要合并成upd2,输出为ccc。这个怎么实现?

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2016-03-22 15:21 |只看该作者
回复 6# yangjavine

这不是“真正”的问题......

你一直要找“老张”的店...(早就变“老王”的店了)
你只是肚子饿,想吃面...(老张/老王“无关)

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
8 [报告]
发表于 2016-03-22 15:38 |只看该作者
  jason680  说的很有道理, 就像前段时间, 我也想在C 里面通过拼装字符串来给这个字符串所代表的值来赋值, 我的场景是 有一个结构体如下:
typedef struct ST_A{
    int num_1;
    int num_2;
    int num_3;
   ...
} st_a_def;
然后我有一个循环,
for(i=1;i<=n;++i)
{
    //我想在这里对结构体赋值, 又不想用switch case
}
我想我这个问题应该和楼主的有点类似,
后来我还是用的switch case, 顺便在这里问问, 有碰到过类似情况的吗, 有什么好的解决方案

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
9 [报告]
发表于 2016-03-22 16:31 |只看该作者
本帖最后由 cao627 于 2016-03-22 16:32 编辑

@elu_ligao用数组
估计你要的是如下需求
for(j=1;j<=n;++j)
{
    num[j]=j;
}

首先要为你的问题找到最合适的数据结构。而不是在不合适的数据结构上浪费代码。

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
10 [报告]
发表于 2016-03-22 16:47 |只看该作者
@yangjavine
你的问题除了如下需求:在awk中根据不同的情况求出一n的,然后根据这个n的不同打印事先定义好的内容。看不出还有什么别的用途。

可用如下的伪代码概括为:

awk  'BEGIN{upd[1]="aaa";upd[2]="bbb";..........}{算出n的值;print upd[n]}'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP