linux实现表格数据的转置

我们在做数据处理的时候经常需要行列转置,这样才能适合下游的画图程序,或者软件输入格式。
今天介绍两种方式。

linux命令行,还有python。

linux命令行

cat a.txt

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

先创建一个文件

用空格分隔。

for i in `seq $(head -n 1 a.txt | awk '{print NF}')`; do cut -d " " -f $i a.txt | tr "\n" " "| sed '$ s/$/\n/' >> b.txt; done

注意如果是tab分隔, cut -d " ",-d参数不要加。

for i in `seq $(head -n 1 a.txt | awk '{print NF}')`; do awk -v a=$i '{print $a}' a.txt | awk BEGIN{RS=EOF}'{gsub("\n"," ");print}' >> c.txt; done
for i in `seq $(awk '{print NF}' a.txt | head -n 1)`; do awk -v a=$i '{print $a}' a.txt | xargs >> d.txt; done
for i in `seq $(head -n 1 a.txt | awk '{print NF}')`; do cut -d " " -f $i a.txt | sed ':a; N;s/\n/ /; ta' >> e.txt;done

这几种方法也是可行的。而且其实逻辑是一样的就是当做行处理,然后通过sed,tr,awk补充格式。

python

可以自己手写一个其实只要将内容沿着对角线互换就可以。。。so easy

df = pd.read_csv("a.txt",header=None)
#1
print(df.T) # 最简单也最便捷
#2新构建一个
df2 = pd.DataFrame(df.values.T, index=df.columns, columns=df.index)
df2.to_csv("b.txt")

注意输入输出一般需要设置sep。

你可能感兴趣的:(自动化办公,数据分析)