1行に50文字、合計50行のファイルがあります。ファイルの各行には文字が含まれています。文字のシリアル番号(52など)を指定し、指定され*
た文字の前に適切な文字行を印刷したいと思います。
ベストアンサー1
仕様をハードコードする1つの方法は、オフセット(改行を無視)に基づいて行と列番号を計算し、この値を使用して正しい行を選択し、正しい列を強調表示することです。
入力ファイルにはin
50行があり、次のようになります。
00ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
01ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
02ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
03ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
04ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
これにより、次のスクリプトが要件を大まかに満たす必要があります。
while read -p '> ' n; do
n=$((n - 1))
line=$((n / 50 + 1))
col=$((n % 50))
<in sed -n -e "${line}p" | sed "s/^.\{${col}\}/&*/g"
done
対話の例:
> 1
*00ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
> 2
0*0ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
> 49
00ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrst*uv
> 50
00ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstu*v
> 52
0*1ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
> 125
02ABCDEFGHIJKLMNOPQRSTUV*WXYZabcdefghijklmnopqrstuv
sedへの最初の呼び出しは正しい行を選択し、2番目の呼び出しは*
正しい列にaを挿入します。