[英]row to column using awk
我想知道如何使用awk將以下內容(“舊”)轉換為“ New1”和“ New2”:
舊:
5
21
31
4
5
11
12
15
5
19
5
12
5
.
.
NEW1:
5 21 31 4
5 11 12 15
5 19
5 12
.
.
NEW2:
521314
5111215
519
512
.
.
非常感謝!
需要多字符RS
gawk:
$ awk 'BEGIN {RS="\n5\n"} {$1=$1; print (NR>1 ? 5 OFS $0 : $0)}' file
5 21 31 4
5 11 12 15
5 19
5 12
對於第二個版本,只需將OFS
設置為空字符串:
$ awk -v OFS="" 'BEGIN {RS="\n5\n"} {$1=$1; print (NR>1 ? 5 OFS $0 : $0)}' file
521314
5111215
519
512
要獲取new1
:
awk '/^5/{printf "%s", (NR>1?RS:"")$0;next}{printf " %s",$0}END{print ""}' file
要獲取new2
:
awk '/^5/{printf "%s", (NR>1?RS:"")$0;next}{printf "%s",$0}END{print ""}' file
@jas腳本的一些變化
$ awk -v RS="(^|\n)5\n" -v OFS='' 'NR>1{$1=$1; print 5,$0}' file
521314
5111215
519
512
$ awk -v RS="(^|\n)5\n" -v OFS=' ' 'NR>1{$1=$1; print 5,$0}' file
5 21 31 4
5 11 12 15
5 19
5 12
在第二個腳本中,您不必顯式設置OFS
因為它是默認值,否則,兩個腳本都相同(基本上與另一個引用的答案相同)。
任何awk:
$ awk -v ORS= '{print ($0==5 ? ors : OFS) $0; ors=RS} END{print ors}' file
5 21 31 4
5 11 12 15
5 19
5 12
$ awk -v ORS= -v OFS= '{print ($0==5 ? ors : OFS) $0; ors=RS} END{print ors}' file
521314
5111215
519
512
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.