簡體   English   中英

AWK命令使用自定義記錄分隔符和字段分隔符格式化文本輸出

[英]Awk command to format text output with custom record separator and field Separator

我有一個文件,該文件具有以下方式的數據:

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

我個人會這樣寫:

awk -v RS='end' -v OFS='\t' '{$1=$1}1' file

區別在於我使用-v來指定記錄分隔符RS和輸出字段分隔符OFS 我還使用$1=$1使awk“觸摸”每條記錄(以便將格式更改為使用OFS ),最后使用1作為{print}的簡寫形式(因為1始終為True且默認操作為在True上awk將打印記錄)。

我可能會使用perl (是的,我知道那不是您所要的,但鑒於它是Unix上的標准,無論如何我都會提供它)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM