我有一个如下文件:
1,
cake:01351
12,
bun:1063
scone:13581
biscuit:1931
14,
jelly:1385
我需要对它进行转换,以便在行的开头读取一个数字时,它与下面的行组合,但如果在开头没有数字,则保持原样。这将是我需要的输出:
1,cake:01351
12,bun:1063
scone:13581
biscuit:1931
14,jelly:1385
使用sed实现这一点时遇到很多麻烦,似乎它可能不是我认为应该非常简单的最佳方式。
任何建议都非常感谢。
答案 0 :(得分:18)
非常基本的sed
实施:
sed -e '/^[0-9]/{N;s/\n//;}'
这依赖于上的第一个字符'number'行是一个数字(如您所指定的那样)。
它
^[0-9]
N
s/\n//
答案 1 :(得分:1)
这是我的Intranet上的文件。我不记得我在哪里找到了方便的sed
单线。如果你搜索'sed one-liner'
你是否曾经需要结合文本行,但手动操作太繁琐了。
例如,假设我们有一个包含数百行的文本文件,如下所示:
14/04/2003,10:27:47,0
IdVg,3.000,-1.000,0.050,0.006
GmMax,0.011,0.975,0.005
IdVg,3.000,-1.000,0.050,0.006
GmMax,0.011,0.975,0.005
14/04/2003,10:30:51,600
IdVg,3.000,-1.000,0.050,0.006
GmMax,0.011,0.975,0.005
IdVg,3.000,-1.000,0.050,0.006
GmMax,0.010,0.975,0.005
14/04/2003,10:34:02,600
IdVg,3.000,-1.000,0.050,0.006
GmMax,0.011,0.975,0.005
IdVg,3.000,-1.000,0.050,0.006
GmMax,0.010,0.975,0.005
每个日期(2003年4月14日)是数据记录的开头,并在接下来的四行继续。
我们想将此输入Excel作为“逗号分隔值”文件,并查看其自己行中的每条记录。
在我们的示例中,我们需要将以G或I开头的任何行附加到前一行,并插入逗号,以便生成以下内容:
14/04/2003,10:27:47,0,IdVg,3.000,-1.000,0.050,0.006,GmMax,0.011,0.975,0.005,IdVg,3.000,...
14/04/2003,10:30:51,600,IdVg,3.000,-1.000,0.050,0.006,GmMax,0.011,0.975,0.0005,IdVg,3.000,...
14/04/2003,10:34:02,600,IdVg,3.000,-1.000,0.050,0.006,GmMax,0.011,0.975,0.0005,IdVg,3.000,...
这是“正则表达式”的经典应用,再一次,sed来救援。
可以使用单个sed命令完成编辑:
sed -e :a -e '$!N;s/\n\([GI]\)/,\1/;ta' -e 'P;D' filename >newfilename
我没有说这是显而易见的,还是简单的,是吗?
这是你在极少数情况下在某个地方写下来的命令。
答案 2 :(得分:1)
尝试使用正则表达式,例如:
sed '/[0-9]\+,/{N}s/\n//)'
检查第一行的数字(0-9)和逗号,然后将所有内容替换为新行,将其删除。
答案 3 :(得分:1)
另一个awk解决方案,比其他一些答案更不含神秘:
awk '/^[0-9]/ {n = $0; getline; print n $0; next} 1'
答案 4 :(得分:0)
$ awk 'ORS= /^[0-9]+,$/?" ":"\n"' file
1, cake:01351
12, bun:1063
scone:13581
biscuit:1931
14, jelly:1385