如何进行行列转换LINUX

使用awk进行行列转换

假设有一个文件 test ,包含的数据遵循以下格式:

同一行数据,单词之间为1个空格" "

每一行都有同样多的数据,个数相同

 

处理命令:

awk '{for(i=1;i<=NF;i=i+1){a[NR,i]=$i}}END{for(j=1;j<=NF;j++){str=a[1,j];for(i=2;i<=NR;i++){str=str " " a[i,j]}print str}}' test

简单说明:

NR - Number of Record - 当前处理的行是第几行(因为awk是流处理工具,一行一行处理的,所以NR在不停的自增1);END里面引用的NR,是处理完文本后的NR

FNR - File Number of Record - 当前处理的行是当前处理文件的第几行

NF - Number of Fileds - 当前行有多少列数据(这个在每行都会根据设定的分割符重新计算,默认分割符是任意连续的多个空白符)

 

处理过程简析:

第一步是把文本里的数据存入一个2维数组;存放的方式要和文本中的一模一样;

awk处理文本时获得了行列数据;NR表示处理了几行文本,输出结果就有NR列;NF表示文本的列数,输出结果有NF行

在END模块里处理2维数组;把数组的行转为列,并存入另一个2维数组str中

最后打印出这个数组str

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值