CSVファイルの各行のファイルパスを取得するコマンドがあります。
awk -F, 'NR>0 {print "/mnt/datagenetique/ANALYSIS/Infectiologie/COVID-WGS/Analyse/" $2 "_*/dragen-covidseq/" $1 "_*_ds*/consensus/*.consensus_hard_masked_sequence.fa"}' input.csv
input.csvファイルの例:
2071404446,RUN111
2071405093,RUN111
2071405134,RUN111
このコマンドの後の詳細な例:
/mnt/datagenetique/ANALYSIS/Infectiologie/COVID-WGS/Analyse/RUN111_*/dragen-covidseq/2071404446_*_ds*/consensus/*.consensus_hard_masked_sequence.fa
/mnt/datagenetique/ANALYSIS/Infectiologie/COVID-WGS/Analyse/RUN111_*/dragen-covidseq/2071405093_*_ds*/consensus/*.consensus_hard_masked_sequence.fa
/mnt/datagenetique/ANALYSIS/Infectiologie/COVID-WGS/Analyse/RUN111_*/dragen-covidseq/2071405134_*_ds*/consensus/*.consensus_hard_masked_sequence.fa
では、異なるファイルのすべてのコンテンツを1つのファイルにリンクしたいと思います。次の単純なパイプコマンドを試しました。
awk -F, 'NR>0 {print "/mnt/datagenetique/ANALYSIS/Infectiologie/COVID-WGS/Analyse/" $2 "_*/dragen-covidseq/" $1 "_*_ds*/consensus/*.consensus_hard_masked_sequence.fa"}' input.csv | xargs cat > output.fasta
しかし、ワイルドカードの代わりに文字としてxargs
解釈されているようで、「該当するファイルやディレクトリはありません」エラーが発生します。ちなみに、パスに を*
除く *
スペースやスペース文字はありません。
何をすべきか知っていますか?
ベストアンサー1
これらの文字をシェルグローバル文字(ワイルドカード)に拡張するには、*
それを実行するプログラム(シェルなど)にその文字を渡す必要があります。
入力ファイルのフィールドにシェルに特別な意味を持つ他の文字が含まれていないと仮定すると、(1)を試すことができます。
awk -F, 'NR>0 {print "cat /mnt/datagenetique/ANALYSIS/Infectiologie/COVID-WGS/Analyse/" $2 "_*/dragen-covidseq/" $1 "_*_ds*/consensus/*.consensus_hard_masked_sequence.fa"}' input.csv | sh > output.fasta
このコマンドは、解釈のためにシェルにパイプされるawk
同様のコマンドを出力します。各ファイルに対して別々のプロセスを実行したくcat /path/with/wildcards/to/some/file
ない場合は、cat
シェルからファイル名を印刷してxargs
(2)に渡すことができます。
awk -F, 'NR>0 {print "echo /mnt/datagenetique/ANALYSIS/Infectiologie/COVID-WGS/Analyse/" $2 "_*/dragen-covidseq/" $1 "_*_ds*/consensus/*.consensus_hard_masked_sequence.fa"}' input.csv | sh | xargs cat > output.fasta
awk
質問に表示された入力ファイルを使用して(1)のコマンドを実行すると、コマンドの出力は次のようawk
になります。
cat /mnt/datagenetique/ANALYSIS/Infectiologie/COVID-WGS/Analyse/RUN111_*/dragen-covidseq/2071404446_*_ds*/consensus/*.consensus_hard_masked_sequence.fa
cat /mnt/datagenetique/ANALYSIS/Infectiologie/COVID-WGS/Analyse/RUN111_*/dragen-covidseq/2071405093_*_ds*/consensus/*.consensus_hard_masked_sequence.fa
cat /mnt/datagenetique/ANALYSIS/Infectiologie/COVID-WGS/Analyse/RUN111_*/dragen-covidseq/2071405134_*_ds*/consensus/*.consensus_hard_masked_sequence.fa
出力ラインは次から始まります。cat
(awk
質問の命令とは反対)。
*
パターンに一致するファイルがないため、シェルの文字拡張をテストできません。
(2)のコマンドはawk
同様の出力を生成しecho
ますがcat
。