我有一个文件,其中包含以下方式的数据:
1
2
3
end
4
5
6
我希望输出格式为:
1 2 3
4 5 6
这里是字符串" end"代表记录分隔符。 我是UNIX新手并使用Awk来实现这一目标,我相信可以有更简单,更好的方法。 这是我的尝试:
awk 'BEGIN {RS="end\n"; FS="\n"} { print $1 "\t" $2 "\t" $3 "\t" $4'} atestfile.awk
答案 0 :(得分:5)
就我个人而言,我会这样写:
awk -v RS='end' -v OFS='\t' '{$1=$1}1' file
不同之处在于我使用-v
来指定记录分隔符RS
和输出字段分隔符OFS
。我还使用$1=$1
让awk“触摸”每条记录(以便格式更改为使用OFS
)和1
作为{{1}的简写}(因为{print}
始终为True,1
对True的默认操作是打印记录。)
答案 1 :(得分:0)
我可能会使用use strict;
use warnings;
#read STDIN or a filename designated on command line.
while (<>) {
#replace linefeeds with spaces.
s/\n/ /g;
#Check for presence of "end"
if (m/end/) {
#insert linefeed
print "\n";
}
else {
print;
}
}
(是的,我知道这并不是你所要求的,但鉴于它在Unix上的标准,我会提供它反正)。
if (Request.IsAjaxRequest())
{
return new JsonResult { Data = message, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}