ディレクトリ内のファイルグループをリンクするためのループを作成する方法は?

ディレクトリ内のファイルグループをリンクするためのループを作成する方法は?

手動で参加するのに時間がかかる非常に大きなファイルがたくさんあります。それらは次のとおりです。

  • File_a1.txt
  • File_a2.txt
  • File_a3.txt
  • File_b1.txt
  • File_b2.txt
  • File_b3.txt
  • ファイル_c1.txt
  • File_c2.txt
  • file_c3.txtなどのループを使用してすべてのa、すべてのb、およびすべてのcを一緒にリンクする方法は?

答え1

私は、「結合」が「コマンドを使用してそれらの間のリレーショナルJOIN操作を実行することjoin」ではなく、接続を意味すると仮定します。また、ファイル名は次のパターンに従うと仮定します。file_XN.txtここでXは特定の文字とN特定の数字で、すべてのファイルは現在のディレクトリにあります。

ファイルの関連付けはコマンドを使用して行われるため、適切な名前のファイルに出力を書き込んでいる間は、すべての「-files」や「-files」などを使用してcatを呼び出すcat必要があります。ab

for filename in ./file_[a-z]*.txt; do
    # extract the letter
    letter=${filename#*_}     # ./file_XN.txt --> XN.txt
    letter=${letter%[0-9]*}   # XN.txt --> X

    cat "$filename" >>"combined_$letter.txt"
done

その後、すべてのファイルを繰り返し、ファイル名から文字を抽出します。その後、この文字は出力ファイル名を設定するために使用され、現在のファイルの内容がその出力ファイルに追加されます。

デフォルトでは、データはディレクトリにリストされているファイルと同じ順序で追加されます。

bash繰り返したい文字を使用して正確に知っている場合(ここにaある文字を使用t)、もう1つの短い方法は次のとおりです。

for letter in {a..t}; do
    cat "file_$letter"*.txt >"combined_$letter.txt"
done

ここでは、ファイル名を繰り返すのではなく、文字を繰り返し、各文字に対してその文字のすべてのファイルを一度に連結します。

関連情報