dポイントプレゼントキャンペーン実施中!

awkの初歩的な質問をさせてください。

空白区切りで、可変長の1行のデータから、2つの値をawkで切り出して、2つのファイルにそれぞれ書きたいため、今は以下のようにしています。

DATA='XXXXX 1234 XXXX 5678 XXXX'
DN=`echo $DATA | awk '{print $2}'`
UP=`echo $DATA | awk '{print $4}'`

echo $DN > file1.txt
echo $UP > file2.txt

awkの使い方として、1行で書けないか、または正しい書き方があれば教えて頂けると幸いです。

質問者からの補足コメント

  • 具体的に書くと、自宅のネットワークのスピードをspeedtestで測ってログに出してます。
    グラフ化しようと思って、zabbixに取り込みたいと考えています。

    DATAは、speedtestの実行結果を1行にしたものです。

    2つのファイルに上りと下りを書きだそうと思ったのですが、awkを2回呼び出したくないなと思って質問しました。
    設計がどこか間違ってるのかも。

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/08/17 17:50

A 回答 (3件)

空白で区切られたデータの 2番目と 4番目を取り出したいだけなら, awk すらいらないっす.



それだけならシェルの set コマンドでできてしまうので, 例えば
DATA='XXXXX 1234 XXXX 5678 XXXX'
set $DATA
echo $2 > file1.txt
echo $4 > file2.txt
というシェルスクリプトで十分です.
    • good
    • 0
この回答へのお礼

おお、これはすごい。
ありがとうございます!

setコマンドにこんな使い方があったなんて知りませんでした!

お礼日時:2018/08/18 13:07

正確にどのようなことをしたいのかがわからないんで確認させてください.



・この DATA の値はどのように設定するのでしょうか? 本当にここにあるように固定した値であるなら, こんな風には書きませんよね.

・DN や UP といった変数はなぜ必要なのでしょうか? 逆にいうと, なぜ
DATA='XXXXX 1234 XXXX 5678 XXXX'
echo $DATA | awk '{print $2}' > file1.txt
echo $DATA | awk '{print $4}' > file2.txt
のように書かなかったのでしょうか.

・「1行」をどのように数えましょうか. print そのものはどうやっても 2個必要ですよね.

・これはシェルスクリプトでしょうか, それとも手入力でしょうか? シェルスクリプトなら, その引数はどうなっているでしょうか?
この回答への補足あり
    • good
    • 0

split関数を使えば、分割は1行でできます。

以下のサンプルでわかるでしょう。

http://bioinfo-dojo.net/2017/10/10/awk-split/

ただ最後は相手にするファイルが2つあるんで、結局は2行に分かれちゃうから言うほど効率的になりませんが…
    • good
    • 0

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