For循环不是每行读取它

For loop not reading it per line

尝试循环包含(见下文)但不是每行每行单独获取的文件。

7b.01.10  0  0.00   0.00   ....  .    0.00  ....  .
3c.00.2   0  0.00   0.00   ....  .    0.00  ....  .
7b.01.0   0  40.18  40.18  1.00  134  0.00  ....  .
3c.00.3   0  35.65  35.65  1.00  135  0.00  ....  .
7b.01.1   0  28.30  28.30  1.00  133  0.00  ....  .
3c.00.4   0  44.71  44.71  1.00  133  0.00  ....  .
7b.01.2   0  32.82  32.82  1.00  131  0.00  ....  .
3c.00.5   0  40.75  40.75  1.00  134  0.00  ....  .
7b.01.3   0  37.92  37.92  1.00  137  0.00  ....  .
3c.00.6   0  32.82  32.82  1.00  133  0.00  ....  .
7b.01.4   0  30.56  30.56  1.00  138  0.00  ....  .

我要处理的是每行中的值。 比如第一行.

F1=7b.01.10
F2=0
F3=0.00
F4=0.00
F5=....
F6=.
F7=0.00
F8=....
F9=.

原因是我将在循环中将每个变量用于另一个 if 语句。 Ex: ans=F1*F4

for i in `cat file.txt`; do
        F1=`echo "${i}" | awk '{ print  }'`
        F2=`echo "${i}" | awk '{ print  }'`
        F3=`echo "${i}" | awk '{ print  }'`
        F4=`echo "${i}" | awk '{ print  }'`
        F5=`echo "${i}" | awk '{ print  }'`
        F6=`echo "${i}" | awk '{ print  }'`
        echo "$F1 $F2 $F3 $F4 $F5 $F6 "
done

知道我错过了什么吗?

您可能想要使用 read

while read line; do
       echo $line
done < file.txt

这应该逐行打印文件。所以,现在,您可以对每一行施展魔法了。

#!/bin/bash

input="data.txt"
while IFS= read -r line
do
        read -ra array <<< "$line"
        F1="${array[0]}"
        F2="${array[1]}"
        F3="${array[2]}"
        F4="${array[3]}"
        F5="${array[4]}"
        F6="${array[5]}"

        echo "$F1 $F2 $F3 $F4 $F5 $F6 "

done < "$input"

Shellcheck-clean 代码处理文本数据文件的常见问题:

#! /bin/bash -p

inputfile='data.txt'
while read -r f1 f2 f3 f4 f5 f6 f7 f8 f9 || [[ -n $f1 ]]; do
    printf '%s\n' "$f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8 $f9"
done < "$inputfile"