题目:
给定一个文件 file.txt,转置它的内容。
你可以假设每行列数相同,并且每个字段由 ' ' 分隔.
示例:
假设 file.txt 文件内容如下:
name age
alice 21
ryan 30
应当输出:
name alice ryan
age 21 30
#!/bin/bash
#转置文件
#
#/bin/bash
num=`cat file.txt | head -n 1|awk '{print NF}'` #获取原文件有多少列
declare -i first=1 #定义一个数值变量
while [ $first -le $num ] #while循环遍历原文件的每一列
do
aa=() #定义一个空数组
declare -i ii=0 #定义数组下标由0开始
content=`awk -v j="$first" '{print $j}' file.txt` #获取原文件每一列内容
for item in $content #for循环遍历每一列内容
do
aa[$ii]=$item #将每一列内容的每一行加入数组中
ii=$[$ii+1] #数组下标自增
done
echo "${aa[@]}" #输出数组元素
first=$[$first+1] #获取原文件下一列的内容
done
【效果】
[root@localhost leetcode]# cat file.txt
2 r r t
3 f g t
[root@localhost leetcode]# ./zzwj.sh
2 3
r f
r g
t t
【脚本逻辑】:
1、获取文件file.txt的第一列内容,并将其存入到一个数组中,此时需要使用循环给数组赋值;然后输出数组中的所有元素;
2、获取文件file.txt的第二列内容,执行同样的操作
3、笔者原计划是使用"echo -n "$item " "来输出每一列的内容,但"$item "是有一个空隔,效果是不一样的。