与えられた値が列Aにある場合、列Bの値を置き換えます。

与えられた値が列Aにある場合、列Bの値を置き換えます。

次のデータが与えられた場合:

aaa bbb aaa ccc aaa ddd
123 222 aaa aaa bbb ccc

列4の値が「ccc」の場合は、sedまたはawkを使用して同じ行の列6の値を「end」という単語に置き換えたいと思います。

どんなアイデアでも大いに感謝します。

答え1

そしてawk

awk '$4=="ccc"{ $6="end" }1' file

最後は1現在行のみを印刷し、次を{ print }参照してください。awkスクリプトの最後の1はどういう意味ですか?)。

答え2

私はテーブル形式のデータを扱うためにsedを使用することをお勧めしませんが、質問のラベルが与えられた場合はとにかくGNU sedソリューションを提供します。

sed -r 's:^(([^ ]* ){3}ccc [^ ]* )[^ ]*(.*)$:\1end\3:' file

6つ以上の列がある可能性があるとします。そうでない場合、(.*)グループ\3は必要ありません。

ご覧のように、コードは書き込み/修正時に読みやすく、エラーが発生しやすく、awkソリューションの方が良い選択です。

答え3

#!/usr/bin/python
k=open('filename','r')
for i in k:
    o=i.strip().split(' ')
    if ( o[3] == "ccc" ):
        o[5]="end"
    print " ".join(o)

出力

aaa bbb aaa ccc aaa end
123 222 aaa aaa bbb ccc

関連情報