すべてのフィールドを検索しないforループ

Dvik

私はしようとしています

  1. 最初の3列を印刷します
  2. 「Eury_gr1_」のあるすべてのフィールドを見つけて、4番目の列に出力します
  3. 行全体に「Eury_gr1_」がない場合は、4番目の列に0を出力します。

入力は、以下の「final_pcs_mod_test.csv」という名前のようになります。

PC_00001,143,143.0,Eury_gr2_(111),Eury_gr5_(19),Unk_unclust_(1),Eury_gr1_(6),MAV_eury_(6)
PC_00004,137,137.0,Eury_gr6_(20),Eury_gr11_(24),Eury_gr14_(24),Eury_gr8_(8),Eury_gr12_(13)
PC_00027,109,109.0,Eury_gr1_(80),MAV_eury_(8)

目的の出力は、以下の「eury1」という名前のようになります。

PC_00001,143,143.0,Eury_gr1_(6)
PC_00004,137,137.0,0
PC_00027,109,109.0,Eury_gr1_(80)

私が使用しているコマンドは次のとおりです。

awk 'BEGIN {FS=","};{for(i=4;i<=NF;i++){if($i~/^Eury_gr1_/){a=$i} else {a="0"}} print $1,$2,$3,a}' final_pcs_mod_test.csv > eury1

実際の出力は次のとおりです。

PC_00001,143,143.0,0
PC_00004,137,137.0,0
PC_00027,109,109.0,Eury_gr1_(80)

ご覧のとおり、最初の行には「Eury_gr1_」エントリがありません。コードは最初に指定された列のみを検索しており、必要に応じてすべての列を検索していないようです。私はfor(i=4;i<=4;i++)などをいじっています...しかし、これまでのところ、入力の最後の列のエントリを見つけることができないようです。入力ファイル全体には、最大17列があります。私は何が間違っているのですか?

RavinderSingh13

GNUで示されたサンプルをフォローし、記述し、テストしてみてくださいawk出力は、示されているサンプルと同じになります。

awk '
BEGIN{
  FS=OFS=","
}
{
  for(i=4;i<=NF;i++){
    if($i~/Eury_gr1_\([0-9]+\)/){
        found=(found?found OFS:"")$i
     }
  }
  if(found==""){ $4="0"   }
  else         { $4=found }
  print $1,$2,$3,$4
  found=""
}' Input_file

または

awk '
BEGIN{
  FS=OFS=","
}
{
  for(i=1;i<=NF;i++){
    if(i<=3){
      val1=(val1?val1 OFS:"")$i
    }
    else if(i>3){
      if($i~/Eury_gr1_\([0-9]+\)/){
        found=(found?found OFS:"")$i
      }
    }
  }
  if(found==""){ $4="0"   }
  else         { $4=found }
  print val1,$4
  found=val1=""
}' Input_file

説明:上記の詳細な説明を追加します。

awk '                                    ##Starting awk program from here.
BEGIN{                                   ##Starting BEGIN section from here of this program.
  FS=OFS=","                             ##Setting field separator and output field separator to comma here.
}
{
  for(i=1;i<=NF;i++){                    ##Traversing through all the fields of current line here.
    if(i<=3){                            ##Checking condition if field number of lesser than or equal to 3 then do following.
      val1=(val1?val1 OFS:"")$i          ##Creating val1 and keep adding values there.
    }
    else if(i>3){                        ##else if field number is greater than 3 then do following.
      if($i~/Eury_gr1_\([0-9]+\)/){      ##Checking if current field is Eury_gr1_(digits) then do following.
        found=(found?found OFS:"")$i     ##Creating variable found and keep adding values there.
      }
    }
  }
  if(found==""){ $4="0"   }              ##Checking condition if found is NULL then make 4th field as zero.
  else         { $4=found }              ##else set found value to 4th field here.
  print val1,$4                          ##Printing val1 and 4th field here.
  found=val1=""                          ##Nullifying val1 and found here.
}' Input_file                            ##Mentioning Input_file name here.

OPの試みの修正: OPのコメントに従って、ここでOPの試みを修正します。ただし、これはEury_gr1各行の1つのオカレンスにのみ一致します。すべてのオカレンスを探すには、上記のソリューションを参照してください。

awk '
BEGIN{
  FS=","
}
{
  for(i=4;i<=NF;i++){
    if($i~/^Eury_gr1_\([0-9]+\)$/){ a1 }
  }
  print $1,$2,$3,a1
  a1=""
}' Input_file

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

すべてのビューでフィールドを検索

分類Dev

ElasticSearchNEST複数のタイプとすべてのフィールドを検索

分類Dev

すべてのフィールドを検索して置換(CSV)

分類Dev

luceneはすべてのフィールドを検索します

分類Dev

フィールドに文字列があるすべてのフィールドを検索します

分類Dev

すべてのフィールドでのループバック検索

分類Dev

MongoDB-複数のフィールドですべての検索文字列の単語を検索します

分類Dev

Elasticsearchでフィールドを検索しています

分類Dev

DjangoModelFormがすべてのフィールドを表示しない

分類Dev

xpathを使用して、値属性のない値で入力フィールドを検索します

分類Dev

djangoフィルターを使用してすべてを検索

分類Dev

特定のモデルのすべてのフィールドに対してdjangoフィルターを使用して一般的な検索を作成しようとしています

分類Dev

jquery検証がすべてのフィールドで機能しない

分類Dev

ElasticsearchでPythonを使用してすべてのフィールドを検索します

分類Dev

複数のフィールドで検索、SELECT IN(すべて)

分類Dev

最初のフィールドを検索し、最初のフィールドが同じであるすべてのレコードの出力を取得します。

分類Dev

特定のフィールドmongoノードで検索してすべてのフィールドを取得します

分類Dev

Mongo検索のすべてのフィールド(キー)を無視します

分類Dev

すべてのフィールドでURLの一部を検索(elasticsearch)

分類Dev

すべてのSolrフィールドで値を検索する

分類Dev

ASP.NetAPIですべてのフィールドを検索する方法

分類Dev

pyMongoでドキュメントのすべてのフィールドを検索します

分類Dev

Iptablesルールはすべてのパケットをドロップしない[UDPフィルター]

分類Dev

Mongo DBは、キーフィールドに応じて最も高い値を持つすべてのレコードを検索します

分類Dev

Solr 7.4.0は、copyfieldを含むすべてのフィールドをデフォルトフィールドに検索しますが機能しません

分類Dev

Elastic Searchはすべてのフィールドを検索し、完全一致を促進します

分類Dev

Indexeddbは、特定のフィールドを持つすべての注文を検索します

分類Dev

タグの後のすべてのjquery入力フィールドを検索します

分類Dev

Mongodbルックアップ集計がすべてのフィールド値を取得していない

Related 関連記事

  1. 1

    すべてのビューでフィールドを検索

  2. 2

    ElasticSearchNEST複数のタイプとすべてのフィールドを検索

  3. 3

    すべてのフィールドを検索して置換(CSV)

  4. 4

    luceneはすべてのフィールドを検索します

  5. 5

    フィールドに文字列があるすべてのフィールドを検索します

  6. 6

    すべてのフィールドでのループバック検索

  7. 7

    MongoDB-複数のフィールドですべての検索文字列の単語を検索します

  8. 8

    Elasticsearchでフィールドを検索しています

  9. 9

    DjangoModelFormがすべてのフィールドを表示しない

  10. 10

    xpathを使用して、値属性のない値で入力フィールドを検索します

  11. 11

    djangoフィルターを使用してすべてを検索

  12. 12

    特定のモデルのすべてのフィールドに対してdjangoフィルターを使用して一般的な検索を作成しようとしています

  13. 13

    jquery検証がすべてのフィールドで機能しない

  14. 14

    ElasticsearchでPythonを使用してすべてのフィールドを検索します

  15. 15

    複数のフィールドで検索、SELECT IN(すべて)

  16. 16

    最初のフィールドを検索し、最初のフィールドが同じであるすべてのレコードの出力を取得します。

  17. 17

    特定のフィールドmongoノードで検索してすべてのフィールドを取得します

  18. 18

    Mongo検索のすべてのフィールド(キー)を無視します

  19. 19

    すべてのフィールドでURLの一部を検索(elasticsearch)

  20. 20

    すべてのSolrフィールドで値を検索する

  21. 21

    ASP.NetAPIですべてのフィールドを検索する方法

  22. 22

    pyMongoでドキュメントのすべてのフィールドを検索します

  23. 23

    Iptablesルールはすべてのパケットをドロップしない[UDPフィルター]

  24. 24

    Mongo DBは、キーフィールドに応じて最も高い値を持つすべてのレコードを検索します

  25. 25

    Solr 7.4.0は、copyfieldを含むすべてのフィールドをデフォルトフィールドに検索しますが機能しません

  26. 26

    Elastic Searchはすべてのフィールドを検索し、完全一致を促進します

  27. 27

    Indexeddbは、特定のフィールドを持つすべての注文を検索します

  28. 28

    タグの後のすべてのjquery入力フィールドを検索します

  29. 29

    Mongodbルックアップ集計がすべてのフィールド値を取得していない

ホットタグ

アーカイブ