根据列值打印字符n次

时间:2019-05-03 02:03:26

标签: bash printf

我试图根据表中几行中的列值多次打印字符“ N”

例如,此表的输出:

AATTGGCC   A   1.7   4
CCGGTTAA   T   0.8   3
AAGGTTCC   G   2.4   7

理想情况下会返回:

NNNN
NNN
NNNNNNN

基于第4列中的值。

当前,我一直在使用:

while read line
do
a=$4
printf "$0.sN\n" {a}
done < table.txt

但是这只会返回三个'N',每个在换行符上。 理想情况下,我还要在输出的每一行末尾打印第2列中的字母。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:4)

使用bash:

while read x x x end; do
  for ((i=0; i<$end; i++)); do
    echo -n "N"
  done
  echo
done < file

输出:

NNNN
NNN
NNNNNNN

答案 1 :(得分:3)

以您提供的示例为基础,我将其更改为:

while read line
do
    a=$(echo ${line} | awk '{print $4}')
    printf "N%.0s" $(seq $a)
    echo
done < table.txt

我不清楚您如何从原始解决方案中获得3 N(我无法复制),但是也许我们有不同的配置。我上面发布的解决方案基于BASH。在while循环中,第一行代码

    a=$(echo ${line} | awk '{print $4}')

回声一行,然后将其通过管道传递到awk语句中,该语句仅查看第四列并将其保存到名为“ a”的变量中。 $(...)符号只是意味着将括号内的语句作为BASH命令(在这种情况下,将echo传递到awk命令中)进行评估。在第二行,

    printf "N%.0s" $(seq $a)

我通过printf命令打印出$ Ns。 $(...)再次简单地运行BASH命令,在这种情况下,它是seq命令,用于打印$ a字符。使用此脚本,我可以为您的示例table.txt文件获得以下结果:

NNNN
NNN
NNNNNNN