2017-06-14 9 views
1

このサイトの回答にすべての作業をしてくれてありがとうございます。私はそれらを読んで何時間も過ごしましたが、まだ私の質問に合ったものは見つかりませんでした。それゆえ私自身の投稿。フォルダにawkを使用し、ファイル名を出力行に追加する

私はそれらの中に複数のサブフォルダとtxtファイルがあるフォルダを持っています。これらのファイルの第7列には、遺伝子名があります(私は生き方について遺伝学をしています:))。これらは私が抽出しようとしている文字列です。まもなく、私は特定の遺伝子名/文字列を含むファイル内の任意の行をフォルダ全体で検索したいと思います。私のような何かを書いて、このためにはgrepを使用している:

grep -r GENE . > GENE.txt 

シンプルに、私はさらに検索を微調整できるようにする必要があり、それはその後、awkが進むべき道であると思われます。

私はawkを使ってみました。

awk '$7 == "GENENAME"' FOLDER/* > GENENAME.txt 

これがうまく機能(そして今、私はこれは私が、grepをして権利を行うことができない、文字列が特定の列でなければならないことを指定することができますか?):私はこのような何かを書きました。 しかし、各行の先頭にファイル名を書き込むgrepとは対照的に、出力ファイルのどの行がどのファイルから来るのかを直接知ることはできません(主に検索のポイントを打ち負かします)。これは、元のファイルの名前を各行のどこかに追加することで、絶対に実行可能なもののように思えますが、わかりません。

私が探しているファイルは変更されていますが、それ以外の場合は常に同じ大きなフォルダの7列の特定の文字列が検索されます。これをどうやって動かすことができますか?

あなたは、あなたがどのファイルから、一致するラインを取得し、ファイルの名前を印刷するには、行番号とFILENAMEを印刷する(FNRはレコードのファイル数を意味する)FNRを使用することができます エリザベートE

+0

*起点ファイルの名前を各行のどこかに追加* - 不明 – RomanPerekhrest

+0

列を定義する方法がわかっている場合は、 'grep'は特定の列のみのパターンを検索できます。 'seq 10 | tr '\ n' '' | grep -E '^([^] +){6} 7''。 –

答えて

3

、事前にありがとう

sample.csv:

aaa 123 
bbb 456 
aaa 789 

コマンド:

例えば、どの行

出力は次のとおりです。

awk '$7 == "GENENAME"{print FILENAME, $0}' FOLDER/* 

その後、サンプル入力と出力期待を明確にするためにあなたの質問を編集しない場合:あなたが探しているよう

aaa 123 1 sample.csv 
aaa 789 3 sample.csv 
+0

@karakfaありがとう、それを忘れてしまった!それはtypoだった、私は私のsample.csvに1つだけの列を持って、私は私の投稿をクリアするために数値の列を追加 – haifzhan

0

が鳴ります。

関連する問題