首先,我真的很新,我遇到了困难......
我有这些数据:
[05/Apr/2010:09:59:34 -0300] /~bcc/topo-zero.html 200 238
2
[05/Apr/2010:10:01:19 -0300] /~bsi/materiais/ed/u6.html 200 286960
3
[05/Apr/2010:10:04:56 -0300] /~firedo/AISG/AISGroupContributions.html 200 33193
2
[05/Apr/2010:10:08:33 -0300] /~bcc/topo-zero.html 200 238
2
我想要成为这个:
[05/Apr/2010:09:59:34 -0300] /~bcc/topo-zero.html 200 238 2
[05/Apr/2010:10:01:19 -0300] /~bsi/materiais/ed/u6.html 200 286960 3
[05/Apr/2010:10:04:56 -0300] /~firedo/AISG/AISGroupContributions.html 200 33193 2
[05/Apr/2010:10:08:33 -0300] /~bcc/topo-zero.html 200 238 2
如果有人可以使用linux命令给我一个解决方案,我会很感激...
答案 0 :(得分:1)
cat data | tr -s ' \n' | sed 'N;s/\n//g'
即,将文件data
传递给tr
,压缩多个空格和换行符。结果通过sed
传递,将交替的行与它们之间的新行字符组合在一起(N
命令),然后删除那些新行字符(s
命令)
答案 1 :(得分:0)
cat blabla | grep 0300 | cut -f1,2,3,4,5
答案 2 :(得分:0)
在我看来,标准的UNIX工具(例如sed
)在处理换行时有点不足。它们被设计为逐行工作,并且很难做出诸如将不同的输入线组合成一行输出的事情。也许有sed
经验超过我的人可以做到这一点......但如果你有权访问它,我建议你尝试使用Perl。
perl -e 'while (<>) { length || cont; chomp; s/^\s+(\d+)$/ \1\n/; print; }' inputfile.txt
如果您希望在记录之间保留额外的空白行,就像在问题中格式化一样,只需将\n
更改为\n\n
(在每个日志记录后打印两个换行符,而不是一个)。
答案 3 :(得分:0)
如果我把它们放在带格式的文件中,我总会发现这些小脚本更容易理解。以下awk脚本似乎产生了所需的输出。这个awk脚本只是查找以方括号开头并且还有一个右括号的行。当遇到带有单个数字的行时,它会用数字打印保存的行。
/^\[.*\]/{
p = $0;
}
/^ *[0-9] *$/ {
printf( "%s %s\n\n", p, $1 );
}
如果将上述内容放在tmp.awk等文件中,则此命令应生成示例输出:
awk -f tmp.awk origfile.txt > newfile.txt
答案 4 :(得分:0)
$ awk 'BEGIN{RS="[";FS="\n"}{$1=$1}NR>1{print "["$0}' OFS="" file
[05/Apr/2010:09:59:34 -0300] /~bcc/topo-zero.html 200 238 2
[05/Apr/2010:10:01:19 -0300] /~bsi/materiais/ed/u6.html 200 286960 3
[05/Apr/2010:10:04:56 -0300] /~firedo/AISG/AISGroupContributions.html 200 33193 2
[05/Apr/2010:10:08:33 -0300] /~bcc/topo-zero.html 200 238 2