it-swarm-id.com

Bagaimana cara menggabungkan semua file (teks) dalam direktori menjadi satu?

Saya punya 14 file yang semuanya menjadi bagian dari satu teks. Saya ingin menggabungkan mereka menjadi satu. Bagaimana cara melakukannya?

99
Ivan

Secara teknis inilah yang seharusnya dilakukan cat ("concatenate"), meskipun kebanyakan orang hanya menggunakannya untuk menghasilkan file ke stdout. Jika Anda memberikan beberapa nama file, ia akan menampilkan semuanya secara berurutan, dan kemudian Anda dapat mengarahkannya ke file baru; dalam hal semua file cukup gunakan * (atau /path/to/directory/* jika Anda belum berada di direktori) dan Shell Anda akan memperluasnya ke semua nama file

$ cat * > merged-file
182
Michael Mrozek

Jika file Anda tidak berada di direktori yang sama, Anda dapat menggunakan perintah find sebelum concatenation:

find /path/to/directory/ -name *.csv -print0 | xargs -0 -I file cat file > merged.file

Sangat berguna ketika file Anda sudah dipesan dan Anda ingin menggabungkannya untuk menganalisisnya.


Lebih mudah dibawa:

find /path/to/directory/ -name *.csv -exec cat {} + > merged.file

Ini mungkin atau mungkin tidak mempertahankan pesanan file.

27
3nrique0

Perintah

$ cat * > merged-file

sebenarnya memiliki efek samping yang tidak diinginkan dengan memasukkan 'file yang digabungkan' dalam rangkaian, membuat file run-away. Untuk menyelesaikan ini, baik menulis file yang digabungkan ke direktori yang berbeda;

$ cat * > ../merged-file

atau menggunakan pencocokan pola yang akan mengabaikan file yang digabungkan;

$ cat *.txt > merged-file
10

Seperti yang lain dari sini, katakan ... Anda dapat menggunakan cat

Katakanlah Anda memiliki:

~/file01
~/file02
~/file03
~/file04
~/fileA
~/fileB
~/fileC
~/fileD

Dan Anda hanya ingin file01 hingga file03 dan fileA ke fileC:

cat ~/file01 ~/file02 ~/file03 ~/fileA ~/fileB ~/fileC > merged-file

Atau, menggunakan ekspansi brace:

cat ~/file0{1..3} ~/file{A..C} > merged-file

Atau, menggunakan ekspansi brancier yang lebih menarik:

cat ~/file{0{1..3},{A..C}} > merged-file

Atau Anda dapat menggunakan loop for:

for i in file0{1..3} file{A..C}; do cat ~/"$i"; done > merged-file
10
Florin Idita

Anda dapat menentukan pattern file lalu menggabungkan semuanya sebagai berikut:

cat *pattern* >> mergedfile
0
user182845

Pilihan lain adalah sed:

sed r 1.txt 2.txt 3.txt > merge.txt 

Atau...

sed h 1.txt 2.txt 3.txt > merge.txt 

Atau...

sed -n p 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here

Atau tanpa pengalihan ...

 sed wmerge.txt 1.txt 2.txt 3.txt

Perhatikan bahwa baris terakhir tulis juga merge.txt (bukan wmerge.txt!). Anda dapat menggunakan w "merge.txt" untuk menghindari kebingungan dengan nama file, dan -n untuk output diam.

Tentu saja, Anda juga dapat mempersingkat daftar file dengan wildcard. Misalnya, dalam kasus file bernomor seperti dalam contoh di atas, Anda dapat menentukan rentang dengan kurung dengan cara ini:

sed -n w"merge.txt" {1..3}.txt
0
Harini