awk命令使用自定义记录分隔符和字段分隔符格式化文本输出

时间:2015-07-06 11:35:47

标签: bash unix awk

我有一个文件,其中包含以下方式的数据:

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

2 个答案:

答案 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 };
    }