ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

hualnux QA 1.3:如果用shell脚本实现多行逐一纵向输出

2020-06-11 20:39:19  阅读:246  来源: 互联网

标签:字符 shell hualnux 1.3 str3 vm81 t1 sed 个字符


一、需求

上图中有一个密码子表,为了方便我把上图表中内容用文字方式拿出来,并命名为hua.txt,如下:

FFLLSSSSYY**CC**LLLPPHHQQRRRIMTTTTNNKKSSRRVWVVAAAADDEEGGGG
TTTTTTTTTTTTTTCCCCCCCCCCCAAAAAAAAAAAAGGGGGGGGGGGGGGG
TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG

 

 

二、分析

其实这就是一个多行逐一以纵向的方式输出,只不是行之间多了一个空格。

如果要把行变成纵向读的话,那我是不是可以把第行的字对应纵向拼出来就行了,思路如下:

1.上面有4行我们可以拿4个变量去存,分别为str1、str2、str3、str4

这个功能不难实现用sed就可以取指定某行的值

2.我们再把str1第1个字符  空格 str2第1个字符 空格 str3第1个字符 空格 str4第1个字符,同理按顺序读第2个,第3个,第n个,可以用循环的方式输出即可,首先需要解决2个问题

  1. 第个字符的长度是怎决定,既然要输出所有字符,为了简单点,直接用最长字符长度如str3和str4为准,取字符长度保可以使用${#str3}
  2. 如何一个一个输出字符串的字符呢?grep、awk、sed都没有更细粒度的,cut命令可以做到

        -c:仅显示行中指定范围的字符;比如你截第一个1字符可以 cut -c 1

把上面的2个思路连起来,就可以实现了

 

三、解决

hua.txt和脚本内容如下:

[root@vm81 t1]# cat hua.txt 
FFLLSSSSYY**CC**LLLPPHHQQRRRIMTTTTNNKKSSRRVWVVAAAADDEEGGGG
TTTTTTTTTTTTTTCCCCCCCCCCCAAAAAAAAAAAAGGGGGGGGGGGGGGG
TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
[root@vm81 t1]# 
[root@vm81 t1]# cat line2row.sh 
#!/bin/bash
str1=`sed -n 1p $1`
str2=`sed -n 2p $1`
str3=`sed -n 3p $1`
str4=`sed -n 4p $1`

for(( i=1;i<=${#str3};i++))
do 
   new=$(echo $str1|cut -c $i)' '$(echo $str2|cut -c $i)' '$(echo $str3|cut -c $i)' '$(echo $str4|cut -c $i)
   echo "$new"
done

执行效果如下:

[root@vm81 t1]# sh line2row.sh hua.txt 
F T T T
F T T C
L T T A
L T T G
S T C T
S T C C
S T C A
S T C G
Y T A T
Y T A C
* T A A
* T A G
C T G T
C T G C
* C G A
* C G G
L C T T
L C T C
L C T A
P C T G
P C C T
H C C C
H C C A
Q C C G
Q C A T
R A A C
R A A A
R A A G
I A G T
M A G C
T A G A
T A G G
T A T T
T A T C
N A T A
N A T G
K A C T
K G C C
S G C A
S G C G
R G A T
R G A C
V G A A
W G A G
V G G T
V G G C
A G G A
A G G G
A G T T
A G T C
D G T A
D G T G
E  C T
E  C C
G  C A
G  C G
G  A T
G  A C
  A A
  A G
  G T
  G C
  G A
  G G

发现最后几个不对齐,不美观,改用printf输出美化一下,修改一下源代码,如下:

#!/bin/bash
str1=`sed -n 1p $1`
str2=`sed -n 2p $1`
str3=`sed -n 3p $1`
str4=`sed -n 4p $1`

for(( i=1;i<=${#str3};i++))
do 
   printf "%-1s %-1s %-1s %-1s\n" "$(echo $str1|cut -c $i)" "$(echo $str2|cut -c $i)" "$(echo $str3|cut -c $i)" "$(echo $str4|cut -c $i)"
done

printf中:

%s %c %d %f都是格式替代符

%-ns,n为数字 指一个宽度为n个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在n个字符宽的字符内,如果不足则自动以空格填充, 

效果如下:

[root@vm81 t1]# sh line2row.sh  hua.txt 
F T T T
F T T C
L T T A
L T T G
S T C T
S T C C
S T C A
S T C G
Y T A T
Y T A C
* T A A
* T A G
C T G T
C T G C
* C G A
* C G G
L C T T
L C T C
L C T A
P C T G
P C C T
H C C C
H C C A
Q C C G
Q C A T
R A A C
R A A A
R A A G
I A G T
M A G C
T A G A
T A G G
T A T T
T A T C
N A T A
N A T G
K A C T
K G C C
S G C A
S G C G
R G A T
R G A C
V G A A
W G A G
V G G T
V G G C
A G G A
A G G G
A G T T
A G T C
D G T A
D G T G
E   C T
E   C C
G   C A
G   C G
G   A T
G   A C
    A A
    A G
    G T
    G C
    G A
    G G

 是不是美化了,对齐了^_^

标签:字符,shell,hualnux,1.3,str3,vm81,t1,sed,个字符
来源: https://blog.csdn.net/hualinux/article/details/106659656

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有