我想每隔3列将列转换为行。
INPUT.TXT
Name
Age
Place
aa
22
xx
bb
33
yy
cc
44
zz
....
....
期望输出
Name,Age,Place
aa,22,xx
bb,33,yy
cc,44,zz
我已尝试过以下命令和in-complete
awk '
{
for(c = 1; c <= NR; c++) { a[c]=$c }
}
END {
for(r = 1; r <= NR; r++) {
for(t = 1; t <= 3; t++) {
printf("%s ", a[c])
}
print ","
}
}' Input.txt
寻找你的建议......
答案 0 :(得分:2)
有很多好的工具。
$ awk 'ORS=NR%3?",":RS' file
Name,Age,Place
aa,22,xx
bb,33,yy
cc,44,zz
只要行不是3的倍数,它就会将输出字段分隔符设置为,
。这样,它就会连接每组3行。
Idiomatic awk中的更多信息。
$ xargs -n3 <file
Name Age Place
aa 22 xx
bb 33 yy
cc 44 zz
这将获得由X
定义的-n X
项块的输入。然后,您可以使用逗号tr
或sed
替换空格。
$ paste -d"," - - - <file
Name,Age,Place
aa,22,xx
bb,33,yy
cc,44,zz
这会连接每3个输入并使用分隔符,
作为分隔符。
关于转置本身,我刚才在Using bash to sort data horizontally中写了一段代码:
transpose () {
awk '{for (i=1; i<=NF; i++) a[i,NR]=$i; max=(max<NF?NF:max)}
END {for (i=1; i<=max; i++)
{for (j=1; j<=NR; j++)
printf "%s%s", a[i,j], (j<NR?OFS:ORS)
}
}'
}