2017-05-05 5 views
0

最初の列の番号(1〜30まで)に基づいてファイルをフィルタリングし、フィルタリングパラメータに対応する行に1つのファイルを保存したいとします。だから、最後に30ファイルを作成する必要があります。私はシェルとawkを使ってforループを使ってこれをしようとしていますが、うまくいきません。あなたが必要とすると、このようなものですawkコマンドラインから複数のファイルを保存する

for ((K=1; K <= 30; K++)); do awk '{if($1==$K) print $0}' example_file.map > example_file_CHR${K}.map; done 
+0

あなたの質問には、簡潔でテスト可能なサンプル入力と予想される出力が含まれています。私たちはあなたの問題を実証するために30行以上のサンプル入力ファイルと30個の出力ファイルを必要としません.3つではなく3つはうまく動作するはずです。 –

答えて

1

...

awk '1<=$1 && $1<=30 {print > "file_"$1}' file 

bashのループは必要ありません。

+0

ありがとうございます。実際には、次のコマンドラインを使用して問題を解決することができました。{1.30}のKに対する ; awk -v a = $ K '{if($ 1 == a)print $ 0}'を実行します。../link_gwas_sample_filtered_maf_geno_02_03_17.map> plink_gwas_subfert_CHR $ {K} .map; done –

+0

はい、パフォーマンス、保守性、コンプライアンス、シンプルさなどを判断する必要があるタスクを実装する方法は複数あります。 – karakfa

+0

ありがとう、Karakfa! –

関連する問題