重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Bシェルのawkコマンドについてですが、例えばプロンプトから
% ls -l hoge.txt | awk '{print $5}'

と入力すると、hoge.txtのファイルサイズが出力されますが、同様のことをBシェルの中で行おうと思っています。

下記のように、配列arrayにはスペース区切りで3つのデータが入っており、N番目のデータを取得したいという場合に、Nに変数を使用して取得する方法がわかりません。

#!/bin/sh

array="AA BB CC"
num=3 # CCを取得したい
echo $array | awk '{print $num}'

上記で実行すると、"AA BB CC"のようにすべて出力されてしまいます。awkで出力する箇所を${数値}で指定すればうまくいくのですが、ランダムで決めた数値(1~3)をnumに入れて取得したい場合、このようなことは可能でしょうか。

もし不可能な場合でも、awk以外に何かコマンドがあればご教授願います。なお、作成するのはBシェルになります。

A 回答 (1件)

' ' で囲まれた中では、$によるシェル変数置換は効きません。

" " で囲むとシェル変数置換が行われます。ただ、
echo $array | awk "{print $num}"
と書くと、$num が 3 のため、
echo $array | awk "{print 3}"
となり、3が表示されるだけです。

echo $array | awk "{print \$$num}"
echo $array | awk '{print $'$num'}'
のどちらか好みのほうを使ってください。私の好みは後者です。

他には、cut コマンドも使えるかと思います。詳しくは、man cut を。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

echo $array | awk "{print \$$num}"
でやったところ、プロセスIDが出力されてしまい、

echo $array | awk '{print $'$num'}'
でやったところ、要素が全て表示されてしまいました。

ですがcutを使用し、

echo ${array} | cut -f${num} -d' '

のようにしたところ、うまくいきました。
ありがとうございます。

お礼日時:2003/12/02 22:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!