使用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个数字… 解决方法
该计划应如此:
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不再以数字开头(标志已设置):重启(清除缓冲区和标志) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |