加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

使用awk / tr / sed进行bash conditionnal getline?

发布时间:2020-12-14 00:32:45 所属栏目:Linux 来源:网络整理
导读:我正在努力解决这个问题,我希望将一组行连接成一行/一行. 我文件的每一行(titi / toto / tata)有2或3个以“;”分隔的字段 所以我的输入是这样的: titi1titi2 titi343;75;971;2;87toto1toto2toto340;50;60tata1tata2tata34;5;25;3;72;5;9 我需要这个输出: t
我正在努力解决这个问题,我希望将一组行连接成一行/一行.
我文件的每一行(titi / toto / tata)有2或3个以“;”分隔的字段
所以我的输入是这样的:

titi1
titi2 
titi3
43;75;97
1;2;87
toto1
toto2
toto3
40;50;60
tata1
tata2
tata3
4;5;2
5;3;7
2;5;9

我需要这个输出:

titi1;titi2;titi3;43;75;97
titi1;titi2;titi3;1;2;87
toto1;toto2;toto3;40;50;60
tata1;tata2;tata3;4;5;2
tata1;tata2;tata3;5;3;7
tata1;tata2;tata3;2;5;9

那么你可以看到前3行是信息(toto / tata等…),应该在数字开始后为每一行重复这些信息.

首先,我的输入只有一行数字,所以它是一个4乘4的分组.所以我在论坛搜索了我找到了一个例子并用这样的getline做了这个:

awk '{getline b; getline c; getline d;printf("%s %s %s %sn",$0,b,c,d)}'

但后来我开始有2个甚至3个数字…
因此,我正在努力做一个“条件”,理解它应该重复前3个lign,每当它看到一个从数字开始的lign.

解决方法

该计划应如此:

awk 'f&&/^[^0-9]/{b="";f=0} /^[^0-9]/{b=b$0";"} /^[0-9]/{print b$0;f=1}'

说明:

1. /^[^0-9]/{b=b$0";"}
  2. /^[0-9]/{print b$0;f=1}
  3. f&&/^[^0-9]/{b="";f=0}

>行不以数字开头:收集输入(titi,toto,tata)>行以数字开头:打印收集的行和$0,设置标志> line不再以数字开头(标志已设置):重启(清除缓冲区和标志)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读