Transpose File

194.Transpose File
题目
Given a text file file.txt, transpose its content.

You may assume that each row has the same number of columns and each field is separated by the ’ ’ character.

For example, if file.txt has the following content:

name age
alice 21
ryan 30
Output the following:

name alice ryan
age 21 30

题目含义:给定一个文件file.txt,转换文件的内容。假设文件内容每行有相同的元素,并且各元素之间由空格分隔。

解题思路:如果把文本的内容看成一个矩阵的话,这里的转换相当于求矩阵的转置。我们使用Linux命令awk,awk是一个强大的文本分析工具,并且awk是逐行处理文件,以空格为默认分隔符将每行分隔成小的元素,再进行各种分析处理。
使用方法awk '{pattern + action}' {filenames},pattern是模式匹配的内容,action是匹配内容要执行的命令。
通过awk的内置变量NF可以知道文本内容列数,NR记录已读的列数,这样我们可以通过for循环把相同列的元素存入一个变量中,用空格分隔,最后再一行一行输出,这样就达到了变换文本内容的目的。
代码如下:

awk '{for(i=1;i<=NF;++i){
    if(NR==1) s[i]=$i;
    else s[i] = s[i] " " $i;
}
}END{
for(i=1;s[i]!="";++i){
    print s[i];
}
}' file.txt

其中$i表示当前行的第i个元素。
执行流程:先读取文件,读入第一行数据,然后将记录按空格划分域,填充域,$0则表示所有域, $1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action,这里是for循环。接着开始读入第二行记录……直到所有的记录都读完并且执行完对应的action,最后再执行END操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值