awkを使って変数にサイズを書きたいのですが、常にゼロのままです。

awkを使って変数にサイズを書きたいのですが、常にゼロのままです。

次の式を使用して変数に数値を書きたいのですが、 val=$(ls -al $1 | awk -v a=$i '{if( NR == a ) print $5}') すべてのiに対して同様の式で0を返すので、問題なくファイル名を書き込みます。

ベストアンサー1

現在のディレクトリの5番目の名前を印刷したいようです。

正しい方法は

shopt -s dotglob
set -- *
printf '%s\n' "$5"

*これは、拡張ファイル名のワイルドカードパターンによって生成されたリストに位置パラメータを設定します(dotglobシェルオプションも設定したため、隠された名前を含む)。 5番目の位置パラメータは、アルファベット$5順に5番目の場所に名前を保持します。ディレクトリに5つ未満の名前が含まれている場合、上記のコマンドは空行を印刷します。

名前にスペース、タブ、または改行が含まれているかどうかは問題ではありません。

変数に名前を付けるには、次のようにします。

val=$5

現在のディレクトリ以外のディレクトリの内容から名前を選択し、ディレクトリと言って$dirパターン"$dir"/*として使用しますか?

名前ではなくファイルサイズが必要な場合は、stat次のようにします。

stat -c %s "$5"

または変数に割り当てるには

val=$( stat -c %s "$5" )

上記はGNUを仮定しstat、ファイルサイズをバイト単位で提供します(存在すると仮定)。

位置パラメータを中断する代わりに名前付き配列を使用するには、次のようにします。

names=( "$dir"/* )

"${names[4]}"次に(配列はシェルのインデックス0から始まります)を使用して5番目の名前を取得しますbash

おすすめ記事