最新記事

「0」と最初の2つのフィールドを除くcsvファイルのすべてのテキストを1に変換するには?
text-processing
awk
command-line
bioinformatics

「0」と最初の2つのフィールドを除くcsvファイルのすべてのテキストを1に変換するには?

いくつかの大きな .csv ファイルがあり、このファイルをバイナリ (1 と 0) 形式に変換したいと思います。最初の2つのフィールドを除いて、テキストを含むすべてのセルは1になり、0は0のままです。 head Test.csv Iss1,1,0,0,Hsapiens-I34,0,0,0,Mmusculus-H01,0,0 Iss1,11,0,Scerevisiae-U09,Hsapiens-I05,0,0,0,0,0,0 Iss1,21,0,0,Hsapiens-I05,0,0,0,Hsapiens-I31,0,0 Iss1,31,0,0,Mmusculus-H13,0,0,0,0,0,Hsapiens-I31 Iss1,41,0,Scerevisiae-U09,0,0,0,0,0,0,Hsapiens-I21 Iss1,51,0,0,0,0,0,0,Scerevisiae-U25,0,Hsapiens-I21 Iss1,61,0,0,Hsapiens-I34,0,0,0,Mmusculus-H13,0,0 予想される結果は head Test.csv Iss1,1,0,0,1,0,0,0,1,0,0 Iss1,11,0,1,1,0,0,0,0,0,0 Iss1,21,0,0,1,0,0,0,1,0,0 Iss1,31,0,0,1,0,0,0,0,0,1 Iss1,41,0,1,0,0,0,0,0,0,1 Iss1,51,0,0,0,0,0,0,1,0,1 Iss1,61,0,0,1,0,0,0,1,0,0 ここで、ファイル内のすべてのテキストは1に変換されます。 誰もがこの問題を克服する方法についてアドバイスをすることができれば非常に感謝します。 ありがとう

Admin

パターン間の文字列を識別し、文字列が見つかるとパターン間の領域全体を印刷します。 awkを使用する方が良い
text-processing
awk
xml
bioinformatics

パターン間の文字列を識別し、文字列が見つかるとパターン間の領域全体を印刷します。 awkを使用する方が良い

同様の質問がありますが、私が経験している問題を完全に解決することはありません。 簡単に言えば、探している文字列を含むすべてのブロックを印刷する必要があります。各ブロックの開始行には次のものが含まれます。 <アイテムバージョン= 詳しくは下記をご覧ください。 パターン領域(ブロック)内で特定の文字列が認識されたら、パターン間の領域全体(ブロック)を印刷する大容量ファイル(数十万行)を検索したいと思います。 以下を使用して、パターン間の領域全体を印刷できることを知っています。ここで、これらのブロックの始まりと終わりの識別子は「/ TSPAN6 T245 TM4SF6 TSPAN-6 上記の実際の形式では、特定の文字列の名前と同義語をチェックしているので、「TSPAN6」が見つかると、対応するブロックが印刷されます。各ブロックには数千の行があるので、以下はブロック内の文字列一致に基づいてブロックを印刷する方法を構成するミニバージョンです。 以下は、文字列が「MEMSAT」と「TNMD」の 入力例の場合の例です。 TSPAN6 T245 TM4SF6 TSPAN-6 TNMD BRICD4 ChM1L myodulin TEM tendin 出力例: TNMD BRICD4 ChM1L myodulin TEM tendin

Admin

同じ数字を持つすべての行で数字を増やす方法
awk
sed

同じ数字を持つすべての行で数字を増やす方法

サンプルファイルは次のとおりです。 test test test test test TEST: 15000 abcabc TEST: 15000 testtest test TEST: 15000 test test test 14000 test test test TEST: 15000 TEST: 15000 15000が表示されている場合は、テキストが何であれ必要があります。各行に1を追加するだけです。 test test test test test TEST: 15001 abcabc TEST: 15002 testtest test TEST: 15003 test test test 14000 test test test TEST: 15004 TEST: 15005

Admin

awkを区切り文字で除算し、最初の項目を取得します。
awk

awkを区切り文字で除算し、最初の項目を取得します。

次の入力があります。 chr1 28374C T 0.0 PASS AF=0.730769;AO=19;DP=26; chr1 29631A G 0.0 PASS AF=0.6;AO=6;DP=10; chr1 39322CAC ACC 0.0 PASS AF=0.266667,0.266667;AO=4,4;DP=16; 最初のAF = [0-9]を使いたいです。 「;」で列を区切っていますが、最初の項目だけをインポートする方法がわかりません。だから私はawkを使用しました。 cat file | awk '{split($6,a,";"); print a[1]}' これは作る: AF=0.730769 AF=0.6 AF=0.266667,0.266667 しかし、私はただ次のことをしたいと思います: AF=0.730769 AF=0.6 AF=0.266667

Admin

パターンで始まる行を選択的に連結する方法 [重複]
shell-script
text-processing
awk
sed
join

パターンで始まる行を選択的に連結する方法 [重複]

この質問にはすでに答えがあります。: sedを使用してパターン付きの行を次の行にリンクするには? (回答4個) 閉鎖3年前。 この記事は次のように表示されます。前の記事のフォローアップ。 入力ファイルは次のとおりです。 module ABC x(a,b,c) module DEFG y(d,e,f, g,h,i) module HIJKL z(j,k,l) 出力ファイルは次のようにする必要があります。 module ABC x(a,b,c) module DEFG y(d,e,f, g,h,i) module HIJKL z(j,k,l) 提供されたソリューションでアスタリスクをワイルドカードとして使用してみました。メモ投稿しかし、期待どおりに動作しません。 付録 綿密に調査した結果、これらのソリューションが実際に初期の作業にも役立つことがわかりました(@steeldriverが指摘したように)。問題は、ファイルがDOS / Windowsプラットフォームで作成され、^M予期しない文字が出力に挿入され、後続の処理がめちゃくちゃになることです。これで入力ファイルに対してdos2unixを実行しましたが、問題は消えました(つまり、以前のソリューションも私にとって効果的でした)。 重複しているため、この投稿を閉じることをお勧めします。

Admin

文字列を一致させ、1行を前の行に移動します。
text-processing
awk
sed

文字列を一致させ、1行を前の行に移動します。

この情報が繰り返される大容量ファイルがあります。残念ながら、固定端末を使用してファイルをラップします。何でも一致させて172上の行に移動する必要があります。 wsmith 623456256 6-meg 172.16.15.198 pppoe 出力は次のようになります。 wsmith 623456256 6-meg 172.16.15.198 pppoe ファイルにフォーマットが正しくない他の行があるため、awkは使用できず、単に2行目を移動します。

Admin

PTRレコードとドメイン+ TLD一致でgrep
bash
awk
grep

PTRレコードとドメイン+ TLD一致でgrep

hostIPコマンドを実行した後、リストにドメイン+ TLDがあることを確認しようとしています。 私のスクリプトは次のとおりです while read ip; do PTR=$(host $ip | rev | cut -d" " -f1 | rev | sed 's/\.$//') if grep -q "$PTR" list.txt then echo "Match in list" else echo "No match in list" fi done

Admin

パターンに基づく検索後の数と行の印刷
text-processing
awk
sed
scripting
uniq

パターンに基づく検索後の数と行の印刷

複数のログファイルにこのような行があります。 ファイル1: Line 203:Caused by :arithmatic overflow exception Line 204:at com.abc.java ファイル2: Line 105:Caused by : ???String out of bound exception Line 206 :at com.def.java 上記のパターンを含むファイルがたくさんあります。これらすべてのファイルで203行と204行の組み合わせの発生回数を計算する方法

Admin

フィールド4と5に、コロンで区切られた数字でエンコードされた文字を含む2つのフィールドを追加します。
awk
sed
grep

フィールド4と5に、コロンで区切られた数字でエンコードされた文字を含む2つのフィールドを追加します。

8番目と9番目のフィールド/列を生成し、適切な文字を4列と5列の数字にエンコードしたいと思います。コロンで区切られた6つの数字は次のとおりです。A:T:C:G:N:del 注:列6と7の一部の行が空でした。 NAを挿入してこの問題を解決しました。 awk -F'[[:space:]]' '$5 && !$6{ $6="NA" }1' awk -F'[[:space:]]' '$6 && !$7{ $7="NA" }1' 次に、もう一度タブを使用してファイルを区切ります。sed -e 's/ /\t/g' ファイル.tsv NW_006532398.1 302035 C 0:0:32:0:0:0 42:0:0:0:0:0 KCND2 intergenic_region NW_006532656.1 289636 C 0:0:28:0:0:0 0:28:0:0:0:0 CNTN1 intron_variant NW_006532762.1 6396 C 0:54:0:0:0:0 0:0:53:0:0:0 NA intergenic_region NW_006532762.1 25741 C 0:0:62:0:0:0 0:43:0:0:0:0 NA intergenic_region NW_006532762.1 32304 T 0:60:0:0:0:0 0:0:49:0:0:0 NA intergenic_region NW_006532762.1 179065 G 0:0:0:45:0:0 59:0:0:0:0:0 DOCK4 intron_variant 出力 example.tsv NW_006532398.1 302035 C 0:0:32:0:0:0 42:0:0:0:0:0 KCND2 intergenic_region C A NW_006532656.1 289636 C 0:0:28:0:0:0 0:28:0:0:0:0 CNTN1 intron_variant C T NW_006532762.1 6396 C 0:54:0:0:0:0 0:0:53:0:0:0 NA intergenic_region T C NW_006532762.1 25741 C 0:0:62:0:0:0 0:43:0:0:0:0 NA intergenic_region C T NW_006532762.1 32304 T 0:60:0:0:0:0 0:0:49:0:0:0 NA intergenic_region T C NW_006532762.1 179065 G 0:0:0:45:0:0 59:0:0:0:0:0 DOCK4 intron_variant G A どんな助けでも大変感謝します! !

Admin

ある行で見つかった値を最初の行の特定のフィールドに一致する別の行に追加する
linux
bash
awk

ある行で見つかった値を最初の行の特定のフィールドに一致する別の行に追加する

あなたのすべてがうまくいくことを願っています! これが私が達成したいものです: 次の行があります。 2022-10-19 09:12:39.174 WRITING bytes(2566), indexname(20220701_cfgsys_017507001635) 2022-10-19 09:12:39.334 WRITING bytes(4301), indexname(20220601_cfgsys_017507001635) 2022-10-19 09:12:39.334 Sent bytes (2566) successfully 2022-10-19 09:12:39.334 WRITING bytes(1293), indexname(20220701_cfgsys_017507001635) 2022-10-19 09:12:39.398 Sent bytes (4301) successfully 2022-10-19 09:12:39.398 WRITING bytes(7285), indexname(20220601_cfgsys_017507001635) 2022-10-19 09:12:39.890 Sent bytes (1293) successfully 2022-10-19 09:12:39.890 WRITING bytes(4289), indexname(20220701_cfgsys_017507001635) 2022-10-19 09:12:40.123 Sent bytes (7285) successfully 内部の値を取得したい。インデックス名「WRITING」に一致する行に角かっこを追加し、「Sent bytes」に一致する行の末尾に追加します。バイトブラケットのマッチング。 たとえば、希望の出力は次のようになります。 2022-10-19 09:12:39.174 WRITING bytes(2566), indexname(20220701_cfgsys_017507001635) 2022-10-19 09:12:39.334 WRITING bytes(4301), indexname(20220601_cfgsys_017507001635) 2022-10-19 09:12:39.334 Sent bytes (2566) successfully 20220701_cfgsys_017507001635 2022-10-19 09:12:39.334 WRITING bytes(1293), indexname(20220701_cfgsys_017507001635) 2022-10-19 09:12:39.398 Sent bytes (4301) successfully 20220601_cfgsys_017507001635 2022-10-19 09:12:39.398 WRITING bytes(7285), indexname(20220601_cfgsys_017507001635) 2022-10-19 09:12:39.890 Sent bytes (1293) successfully 20220701_cfgsys_017507001635 2022-10-19 09:12:39.890 WRITING bytes(4289), indexname(20220701_cfgsys_017507001635) 2022-10-19 09:12:40.123 Sent bytes (7285) successfully 20220601_cfgsys_017507001635 角かっこ内の2つの値(バイト名とインデックス名)を取得する方法を知っています。 cat test.txt | grep "WRITING" | awk -F"[()]" '{print $2" "$4}' $2 = 括弧内のバイト値 $4 = 括弧内のインデックス名の値 ただし、必要な行に追加することはできません。次の行(「WRITING」の後ろ)で「Sent bytes」文字列を検索し、$ 2は「Sent bytes」行の$ 2と等しく、$ 4を追加する必要があります。 「すでにバイトを送る」行末で どんな助けでも大変感謝します! よろしくお願いします!

Admin