次のデータが与えられた場合:
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