在 bash 中执行由变量构造的 while 循环

在 bash 中执行由变量构造的 while 循环

我正在尝试编写一个 shell 脚本,它逐行读取文件,对每一行执行一些操作,并将输出写入新文件。文件名作为参数传递。

由于文件是在运行时传递的,因此我必须在运行时计算列数。

我计算了列数 awk 并使用循环构造一个字符串,如下所示:

file="$1  
del=$2  
columns=`head -1 $file| awk -F'$del' '{print NF}'``  
cols=''  
    for ((z=1; z<=$columns; z++ ))  
    do  
         cols=$cols" ""col""$z"  
    done       
#if file has 4 columns, value of cols will be "col1 col2 col3 col4"  
While read $cols  
do  
#iterating through each column and apply my function - myfunc to do required conversions on each value. variable- $outvarmyfunc is derived in myfunc   
    outline=""  
    for ((s=1; s<=$columns; s++ ))  
    do  
        eval col=\${col$s}  
        myfunc $col  
#below if condition is to avoid delimter before first word in each line  
        if[ $s -eq 1 ]  
        then   
            outline="$outvarmyfunc"  
        else  
            outline="outline""$del""$outvarmyfunc"    
        fi  
    done  
echo "$outline" >> $file"_modified"  
done < $file  

但它不起作用,抛出以下错误:col1 col2 col3 col4:无效的变量名称

我必须读取超过 15 列的大文件

有人可以帮忙吗?

还有更有效的方法来实现这一目标吗?

相关内容