質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

Q&A

2回答

1360閲覧

文字列を入れ替える

00000110

総合スコア0

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

0グッド

1クリップ

投稿2020/08/31 10:07

編集2020/08/31 10:09

初心者なので、不足情報や説明が下手かと思いますが、よろしくお願い致します。

実現したいこと

特定の文字列の前後を入れ替えたいと考えております。
下記のfruits.txtでは「:<色> .(ピリオド) <果物>」の文字列があります。
「.」を基準として、<色>と<果物>の位置を入れ替えたいです。
例):<果物> .(ピリオド) <色>
この場合にどのような処理を作成したらよろしいでしょうか。
投げ出しの状態で申し訳ありませんがよろしくお願い致します。

※この3つのパターン以外にも複数の「:<色> .(ピリオド) <果物>」が使われているます。
※現在awkの修行中でawkでの処理を希望します。(生意気で申し訳ありません)

変更前 ーーーーーーーーfruits.txtーーーーーーーーーー :red . apple :green . Watermelon :green . melon fruits = :yellow . banana
変更後 ーーーーーーーーfruits.txtーーーーーーーーーー :apple . red :Watermelon . green :melon . green fruits = :banana . yellow

考えたこと(ざっくりですが)

・行に対してループを掛け、「:<色>.(ピリオド)<果物>」があるたびに処理(入れ替える処理)を行い、無くなったら次の行

補足情報

Linux環境

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2020/08/31 12:42

というか、今気づいたけど、あなたこの人でしょう。そろそろ丸投げやめて自分の頭でプログラムを書いてみたらいかがか。 https://teratail.com/questions/283941
00000110

2020/08/31 13:05

ご指摘ありがとうございます。 自分なりに考えて入るんですが、それでもわからないので質問しています。 そもそもそのための、サイトでは、、、 とりあえず、他の方の投稿などを見てもう少し調べようと思います。 失礼します。
guest

回答2

0

これはちょっとawkらしく書くのは難しいと思います。
sedなら、

sh

1sed 's/:([A-Za-z]+) *. *([A-Za-z]+)/:\2 . \1/g'

これをそのままawk化して、

sh

1gawk '{print gensub(/:([A-Za-z]+) *. *([A-Za-z]+)/,":\2 . \1","g")}'

投稿2020/08/31 12:36

otn

総合スコア85762

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

awkでは、各行が読み込まれるごとにスペースで分割され、1個以上のフィールドが出来ます。フィールドの総数が変数NFに入ります。それぞれのフィールドを$1, $2, $3,...の形で参照できます。$a, $(NF-1)などのように$の後には任意の式を書くこともできます。

変数aと変数bを入れ替えるのは、次のようにすれば出来ます。

x=a; a=b; b=x

これらを組み合わせれば、

ループを掛け、「:<色>.(ピリオド)<果物>」があるたびに処理(入れ替える処理)を行い、

が実現できます。

投稿2020/08/31 12:28

KojiDoi

総合スコア13692

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問