免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何把两个相同行数的变量拼接成一个变量的2列? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-10-24 09:58 |只看该作者 |倒序浏览
$date、$uv两个变量都是采集于网页上面的
采集方法为curl -s "$url"  -b cookie_file|grep -Po '(?<={"CreateDate":").*?(?=","JumpOutCount)'
得到的数据是这样的:
echo "$date"
2016-10-01
2016-10-02
2016-10-03
2016-10-04
2016-10-05
2016-10-06
2016-10-07
2016-10-08
2016-10-09
2016-10-10
2016-10-11
2016-10-12
2016-10-13
2016-10-14
2016-10-15
2016-10-16
2016-10-17
2016-10-18
2016-10-19
2016-10-20
2016-10-21
2016-10-22
2016-10-23
另外一个变量是这样的:
echo "$uv"
9058
8356
7961
7834
8154
8691
9818
15191
14476
15200
14155
14052
14928
14222
9254
8609
16130
15564
15045
15135
14781
9510
8525

现在想要把$date和$uv拼接到同一个变量$all里面,变成:
2016/10/1        9058
2016/10/2        8356
2016/10/3        7961
2016/10/4        7834
2016/10/5        8154
2016/10/6        8691
2016/10/7        9818
2016/10/8        15191
2016/10/9        14476
2016/10/10        15200
2016/10/11        14155
2016/10/12        14052
2016/10/13        14928
2016/10/14        14222
2016/10/15        9254
2016/10/16        8609
2016/10/17        16130
2016/10/18        15564
2016/10/19        15045
2016/10/20        15135
2016/10/21        14781
2016/10/22        9510
2016/10/23        8525

如果不以制表符为分隔符,要指定一个奇葩的分隔符,比如"\\\",应该怎么办?
如果要拼接的变量不止2个,又要怎么办。。。

目前我自己的做法是把$date、$uv保存成文件,再用paste - d date uv >> all 这个命令保存成文件,再all=$(cat all)这样保存变量
但这种做法肯定很蠢,请老鸟赐教。。。


论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
2 [报告]
发表于 2016-10-24 10:13 |只看该作者

  1. s=`paste -d'@' <(echo "$date") <(echo "$uv")`
  2. echo "$s"
复制代码

2016-10-01@9058
2016-10-02@8356
2016-10-03@7961

论坛徽章:
0
3 [报告]
发表于 2016-10-24 10:47 |只看该作者
moperyblue 发表于 2016-10-24 10:13
2016-10-01@9058
2016-10-02@8356
2016-10-03@7961

好奇怪啊,单条命令的确是可以执行,但是为啥打包到shell里面就报错呢?
ttt.sh: command substitution: line 16: syntax error near unexpected token `('
ttt.sh: command substitution: line 16: `paste -d':' <(echo "$date") <(echo "$uv")'



  1. #!/bin/bash
  2. date='2016-10-01
  3. 2016-10-02
  4. 2016-10-03
  5. 2016-10-04
  6. 2016-10-05
  7. 2016-10-06
  8. 2016-10-07'
  9. uv='9058
  10. 8356
  11. 7961
  12. 7834
  13. 8154
  14. 8691
  15. 9818'
  16. report=$(paste -d':' <(echo "$date") <(echo "$uv"))
  17. echo "${report}"
复制代码



论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
4 [报告]
发表于 2016-10-24 11:09 |只看该作者
本帖最后由 moperyblue 于 2016-10-24 11:15 编辑

回复 3# work4seo

  1. ./ttt.sh
复制代码


  1. source ttt.sh
复制代码


论坛徽章:
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
5 [报告]
发表于 2016-10-24 11:15 |只看该作者

论坛徽章:
0
6 [报告]
发表于 2016-10-24 11:24 |只看该作者

囧。。。。。。
这个我肯定知道啊。。。

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
7 [报告]
发表于 2016-10-24 11:26 |只看该作者
回复 6# work4seo


然而问题解决了?

论坛徽章:
0
8 [报告]
发表于 2016-10-24 11:31 |只看该作者

没有呀。。。chmod +x ttt.sh
./ttt.sh

sh ttt.sh
/bin/bash ttt.sh
source ttt.sh
都是报一样的错误
./ttt.sh: command substitution: line 16: syntax error near unexpected token `('
./ttt.sh: command substitution: line 16: `paste -d':' < (echo "$date") < (echo "$uv"))'


我就是想在脚本里面,把两个变量拼接成一个之后,用在下面的处理环节里面。。。

写入文件之后我再cat出来,其实能达到我要的目的,我就是觉得这样太蠢,shell这么强大,肯定有好的解决方法呀。

论坛徽章:
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
9 [报告]
发表于 2016-10-24 11:46 |只看该作者
>> ...我就是觉得这样太蠢,shell这么强大,肯定有好的解决方法呀。

http://bbs.chinaunix.net/thread-4118053-1-1.html

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
10 [报告]
发表于 2016-10-24 12:05 |只看该作者
本帖最后由 moperyblue 于 2016-10-24 12:09 编辑

回复 8# work4seo

<与(之间不要有空格
report=$(paste -d':' <(echo "$date") <(echo "$uv"))
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP