文本的转置


实现文本转置的三种方法

1
$ awk '{for(i=1;i<=NF;i++){a[FNR,i]=$i}}END{for(i=1;i<=NF;i++){for(j=1;j<=FNR;j++){printf a[j,i]" "}print ""}}' test.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ cat transpose.awk
#! /bin/sh
exec awk '
NR==1 {
n=NF
for (i=1;i<=NF;i++)
row[i]=$i
next
}
{
if (NF>n)
n=NF
for (i=1;i<=NF;i++)
row[i]=row[i] " " $i
}
END {
for (i=1;i<=n;i++)
print row[i]
}' ${1+"$@"}

1
2
3
4
5
6
7
8
$ cat trans.sh 
#!/bin/bash

numc=$(($(head -n 1 "$1" | grep -o "$2" | wc -l)+1))
for ((i=1; i<="$numc"; i++))
do cut -d "$2" -f"$i" "$1" | paste -s -d "$2"
done
$ trans.sh 需要转置文件 分隔符

参考资料

Transposing rows and columns: 3 methods

tiramisutes wechat
欢迎关注