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

时间: 2024-10-17 18:58:34

Linux 文本行列转换的相关文章

linux文本格式转换

问题:在linux环境下面执行SH的可执行文件. -bash: ./start.sh: /bin/sh^M: bad interpreter: No such file or directory 解决办法: 1.查看该文件  vim start.sh   不是编辑模式直接输入:set ff     查看弹出的界面  fileformat=dos  说明文本格式不对 直接set ff  = unix   就可以了 原文地址:https://www.cnblogs.com/byao-8816/p/9

Linux文本编辑器(九)

[教程主题]:Linux文本编辑器 [1]vi vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任 何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令. 由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在 其他任何介绍vi的地方进一步了解它.Vi也是Linux中最基本的文本编辑器, 学会它后,您将在Linux的世界里畅行无阻.Lisp  emacs [2]vi的基本概念 基本上vi可以分为三种状态,分别是命令模式(command 

linux文本处理绝世好剑--awk

awk简介: awk的名称得自于它的创始人Aho, Weinberger, Kernighan三人的首字母. awk是一种数据处理工具,与"grep","sed"被称为linux文本处理三剑客,但相对于grep的查找,sed的编辑,awk擅长对数据分析并生成报告,是一种报告生成器,格式化文本输出,相对于sed常常作用于一整行的文本处理,awk则倾向于将一行分成数个"字段"来处理.因此awk更适合处理小型的数据. awk拥有自己的语言:awk程序设

linux 文件编码格式转换

如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8.下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换. 查看文件编码 在Linux中查看文件编码可以通过以下几种方式: 1.在Vim中可以直接查看文件编码 :set fileencoding 即可显示文件编码格式. 如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以

linux文本常用shell工具

下面将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实用的: 我对shell脚本使用的原则是命令单行书写,尽量不要超过2行:如果有更为复杂的任务需求,还是考虑python吧: find 文件查找 查找txt和pdf文件 [indent]  find . \( -name "*.txt" -o -name "*.pdf" \) -

Linux文本流

Linux文本流 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 文本流 文件用于数据的存储,相当于一个个存储数据的房子.我们之前说,所谓的数据是0或者1的序列,但严格来说,Linux以字节(byte)来作为数据的单位,也就是说这个序列每八位(bit)为一个单位(八位二进制对应的十进制范围为0到255).使用ASCII编码,可以将这样一个字节转换成为字符.所以,在Linux中,我们所说的数据,完全可以用字符表达出来,也就是说文

Linux文本处理命令

正则表达式 POSIX标准将正则表达式分为两类 1.基本的正则表达式 2.扩展的正则表达式 大部分Linux应用和工具仅支持基本的正则表达式 基本正则表达式 符号 意义 * 0个或多个字符 . 匹配任意字符 ^ 行首,在[]中表示非 $ 行尾 [] 匹配字符集合 \ 转义字符 \<\> 精确匹配符号 \{n\} 匹配n次 \{n,\} 匹配至少n次 \{m,n\} 匹配m~n次 扩展正则表达式 符号 意义 ? 匹配0个或1个 + 匹配1个或多个 () 表示一个字符集合或用在expr中 | 表示

linux文本处理常用技巧

1. find 文件查找 查找txt和pdf文件: find . ( -name "*.txt" -o -name "*.pdf" ) -print 正则方式查找.txt和pdf: find . -regex ".*(.txt|.pdf)$" -iregex: 忽略大小写的正则 否定参数 ,查找所有非txt文本: find . ! -name "*.txt" -print 指定搜索深度,打印出当前目录的文件(深度为1): fi

linux文本处理sed、软件包管理、磁盘存储、文件系统和挂载

Linux文本处理工具sed.软件包管理.磁盘存储及文件系统 文本处理工具sed巧妙用法 1.通过sed获取文件路径的基名和目录名 思路:采用正则表达式将文本字符串分组,取对应的分组后向引用即可. 获取基名 [[email protected] ~]#echo /etc/sysconfig/network-scripts/ |sed -r '[email protected](^/.*/)([^/]+)/[email protected]\[email protected]' network-s