linux下文件转置,Linux Shell 编程 文件转置问题

给定一个文件 file.txt,转置它的内容。

你可以假设每行列数相同,并且每个字段由 ' ' 分隔.

示例:

假设 file.txt 文件内容如下:

name age

alice 21

ryan 30

应当输出:

name alice ryan

age 21 30

用awk命令来解决这个问题。 使用一个数组来保存每一列的数据 读取完毕后输出数组

###awk基础用法 awk是用于处理字符串的很强大的工具,可以定义变量,添加控制流,是一种编程语言。 基础语法:

awk '{[匹配模式]{代码}}' {file}

#####awk的用法示例 file.txt 内容

Beth 4.00 0

Dan 3.75 0

kathy 4.00 10

Mark 5.00 20

Mary 5.50 22

Susie 4.25 18

打印文件

awk '{print $0}' file.txt

#$0表示匹配的行,可以省略。$i表示行中空格分隔的第i个字符串(i>=1)

加上行号

awk '{{print $NR,$0}}' file.txt

#NR是内置变量,表示当前读到了文件的第几行。

1 Beth 4.00 0

2 Dan 3.75 0

3 kathy 4.00 10

4 Mark 5.00 20

5 Mary 5.50 22

6 Susie 4.25 18

BEGIN & END 打印第二行的和

awk 'BEGIN {print "start"} {s=s+$2} END {print "sum:",s}' file.txt

#BEGIN: 在读取第一行数据,之前执行的代码

#s 是自定义变量,记录第二行数字之和

#END:读完最后一行执行的代码,打印结果

start

sum: 26.5

解决文件转置问题的代码

awk '{i=1;while(i <= NF){col[i]=col[i] $i " ";i=i+1}} END {i=1;while(i<=NF){print col[i];i=i+1}}' file.txt | sed 's/[ \t]*$//g'

这里有变量i记录读取行的第i个元素,col[]数组用于保存每一列的数据。对于每一行,第i个元素追加到col[i]变量。结束时,col[i]保存了第i列的数据,循环输出col[]数组,不过每一行最后多了个空格,用sed命令去掉后再打印 输入

Beth 4.00 0

Dan 3.75 0

kathy 4.00 10

Mark 5.00 20

Mary 5.50 22

Susie 4.25 18

结果

Beth Dan kathy Mark Mary Susie

4.00 3.75 4.00 5.00 5.50 4.25

0 0 10 20 22 18

d01492fec77a6df65153a8a3f35ecb6b.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值