[英]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.