手動で参加するのに時間がかかる非常に大きなファイルがたくさんあります。それらは次のとおりです。
- 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
必要があります。a
b
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
ここでは、ファイル名を繰り返すのではなく、文字を繰り返し、各文字に対してその文字のすべてのファイルを一度に連結します。