我正在尝试编写一个 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 列的大文件
有人可以帮忙吗?
还有更有效的方法来实现这一目标吗?