码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 文本行列转换

时间:2015-09-04 18:30:06      阅读:526      评论:0      收藏:0      [点我收藏+]

标签:

使用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

Linux 文本行列转换

标签:

原文地址:http://www.cnblogs.com/rustfisher/p/4781995.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!