ファイルを1行ずつ読み、各行でいくつかの操作を実行し、出力を新しいファイルに書き込むシェルスクリプトを作成しようとしています。ファイル名がパラメータとして渡されます。
実行時にファイルが渡されるので、実行時に列数を数える必要があります。
列数を計算しました。 アッ そして、ループを使って次の文字列を構築します。
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個以上の列を含む大容量ファイルを読む必要があります。
誰でも助けることができますか?
これを達成するためのより効率的な方法はありますか?