同様の名前と拡張子を持つ多くのファイルを含む複数のサブディレクトリを持つ既定のディレクトリがあります。 2つのファイルを見つけて、2番目のファイルから共通のエントリを削除したいと思います。
次のコマンドを実行してみました。
awk 'NR==FNR{a[$1]++;next;}!($2 in a)' file1_comma_splited_newsort.txt file2_comma_splited_snp.txt >> output.txt
上記awk
のコマンドは、ファイル1の最初の列とファイル2の2番目の列を比較し、ファイル2の2番目の列から重複した項目を削除します。このコマンドを実行した後、目的の出力を取得します。ただし、サブディレクトリ内の多くのファイルに対してこのコマンドを実行する必要があります。そのためには、find命令を使ってこれら2つのファイルを見つけて上記の命令awk
に入れたいのですが可能ですか?
私のディレクトリに次のファイルが含まれていると思います。
main directory file1_comma_splited_newsort.txt
sub-directory1 file2_comma_splited_snp.txt
sub-directory2 file3_comma_splited_snp.txt
sub-directory3 file4_comma_splited_snp.txt
sub-directory4 file5_comma_splited_snp.txt
sub-directory5 file6_comma_splited_snp.txt
sub-directory6 file7_comma_splited_snp.txt
sub-directory7 file8_comma_splited_snp.txt
sub-directory8 file9_comma_splited_snp.txt
すべてのサブディレクトリファイルの列に存在する重複エントリを削除できるように、1st
すべてのサブディレクトリファイルをプライマリディレクトリファイルの列とfile1_comma_splited_newsort.txt
1つずつ比較する必要があります。2nd
答え1
木がこんな感じだとしましょう。
main
|--maindata.txt
|--sub
|--subdata1.txt
|--subdata2.txt
そして、あなたはcdwとしてメインディレクトリにあります。これはbash
スクリプトを通して行うことができます(必要に応じて1行のスクリプトでも可能です)。
#!/bin/bash
for file in sub/* ; do
awk '{actions}' maindata.txt "$file" >> "$file"_differences
done
これは単にサブディレクトリ内のすべてのファイルを繰り返し、サブディレクトリ内の各ファイルの違いを含むファイルを生成します。