前提・実現したいこと
sedコマンドで特定のキーワードを持つデータIDとそのキーワードを抽出できない。
発生している問題・エラーメッセージ
inputファイル:データID(TEST_00004, _00005, _00006, _00007, _00008)のそれぞれに様々なデータがタブ区切りで含まれる。
TEST_00004 [10カラム目]06F4M@bactNOG,0EY64@cloNOG,0NSV1@firmNOG,0Y6CY@NOG
TEST_00005 [10カラム目]05CDF@bactNOG,0EP54@cloNOG,0ND91@firmNOG,COG0766@NOG
TEST_00006 [10カラム目]05C6Y@bactNOG,0D1MR@chloNOG,COG1004@NOG
TEST_00007 [10カラム目]05ESV@bactNOG,0EPU0@cloNOG,0NDX4@firmNOG,COG0472@NOG
TEST_00008 [10カラム目]00DGT@actNOG,08KGH@bactNOG,COG1316@NOG
↓ 10カラム目に着目し、sed処理により、「COG???」(?は数字)のキーワードを持つデータIDとそのキーワード「だけ」を抽出したい。
(目的の抽出)
TEST_00005 COG0766
TEST_00006 COG1004
TEST_00007 COG0472
TEST_00008 COG1316
(実際のエラー:キーワードである「COG???」(?は数字)が他の文字情報とあわせて抽出される[TEST_00005, TEST_00006, TEST_00007]、あるいはそもそも抽出できない[TEST_00008])
TEST2_00005 05CDF@bactCOG0766
TEST3_00006 05C6Y@bactCOG1004
TEST4_00007 05ESV@bactCOG0472
TEST5_00008 00DGT@actNOG
以下のソースコードの「\」は「バックスラッシュ」です。Linux 初心者で、sedやawkもほぼ初めて使っている状況で、分かりくい内容で申し訳ございません。
該当のソースコード
for i in .inputfile; do sed -e "s/[^\t],(COG[0-9])@NOG/\1/g" $i | awk -F"\t" '$10~/COG/ {print $1"\t"$10}' | sed -e "s/,.//g" -e "s/@NOG//g" > $i.filt; done
試したこと
ソースコードを検討・確認しました。
回答3件
あなたの回答
tips
プレビュー