关于bash:逐个字符循环

Loop over lines character by character

本问题已经有最佳答案,请猛点这里访问。

我试图将一系列字母视为数组,以便在for循环、逐行、逐元素中循环遍历每个字母。

提取列后,我的$data看起来像:

1
2
3
4
5
ACACACACACA
CGCGCGCGGGG
TATATATAAAA
GAGAAAGAAGG
TGGTTTTGGTG

我的剧本:

1
2
3
4
5
6
7
for j in `cat $data` # go line by line
do
    for k in"${j[@]}" # go through each letter element by element
    do
        echo $k
    done
done

给出输出:

1
2
3
4
ACACACACACA
CGCGCGCGGGG
TATATATAAAA
...

我希望输出看起来像:

1
2
3
4
5
6
7
8
9
10
A
C
A
C
A
C
...
G
T
G

我的语法有问题吗?还是有更好的方法来调用行中的每个元素?


最短的选项:

1
fold -1 <<<"$data"

这不是纯粹的狂欢,但这会让你得到你想要的:

1
2
3
4
for j in `echo $data | grep -o .`
do
  echo $j
done

grep命令匹配每一个字符并打印出来(或者在本例中,将其存储在变量j中,我假设您打算在其中执行的不仅仅是echo它)。


假设它总是大写字母:

1
2
$ sed 's/[A-Z]/&
/g'
inputFile

或者使用下面的内容将任何字符和数字替换为相同的字符或数字,后跟换行符。

1
2
$ sed 's/./&
/g'
inputFile

或者如果你有fold可用,

1
$ fold -w1 inputFile

fold包线。使用-w1选项时,它的包装宽度固定为1