2つのファイルを見つけて2番目のファイルから共通アイテムを削除する方法

2つのファイルを見つけて2番目のファイルから共通アイテムを削除する方法

同様の名前と拡張子を持つ多くのファイルを含む複数のサブディレクトリを持つ既定のディレクトリがあります。 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.txt1つずつ比較する必要があります。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

これは単にサブディレクトリ内のすべてのファイルを繰り返し、サブディレクトリ内の各ファイルの違いを含むファイルを生成します。

関連情報