it-swarm-eu.dev

Jak sloučit všechny (textové) soubory v adresáři do jednoho?

Mám 14 souborů, které jsou součástí jednoho textu. Chtěl bych je sloučit do jednoho. Jak to udělat?

99
Ivan

To je technicky to, co má dělat cat ("concatenate"), i když to většina lidí prostě používá pro výstup souborů k vytažení. Pokud mu dáte více názvů souborů, bude je vydávat všechny postupně, a pak je můžete přesměrovat do nového souboru; v případě všech souborů použijte * (nebo /path/to/directory/* pokud ještě nejste v adresáři) a vaše Shell jej rozšíří na všechna jména souborů

$ cat * > merged-file
182
Michael Mrozek

Pokud vaše soubory nejsou ve stejném adresáři, můžete použít příkaz find před zřetězením:

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

Velmi užitečné, když jsou vaše soubory již objednány a chcete je sloučit a analyzovat.


Přenosněji:

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

To může nebo nemusí zachovat pořadí souborů.

27
3nrique0

Příkaz

$ cat * > merged-file

ve skutečnosti má nežádoucí vedlejší účinek zahrnutí „sloučeného souboru“ do zřetězení a vytvoření souboru run-away. Chcete-li to obejít, zapište sloučený soubor do jiného adresáře;

$ cat * > ../merged-file

nebo použijte vzorovou shodu, která bude ignorovat sloučený soubor;

$ cat *.txt > merged-file
10

Stejně jako ostatní odtud říká ... Můžete použít cat

Řekněme, že máte:

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

A chcete pouze file01 to file03 a fileA to fileC:

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

Nebo pomocí rozšíření ortézy:

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

Nebo pomocí rozšíření ozdobných ortéz:

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

Nebo můžete použít smyčku for:

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

Můžete určit pattern souboru a poté je všechny sloučit následujícím způsobem:

cat *pattern* >> mergedfile
0
user182845

Další možností je sed:

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

Nebo...

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

Nebo...

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

Nebo bez přesměrování ...

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

Všimněte si, že poslední řádek zapíše také merge.txt (nikoli wmerge.txt!). Můžete použít w "merge.txt", abyste se vyhnuli záměně s názvem souboru, a -n pro tichý výstup.

Seznam souborů můžete samozřejmě také zkrátit pomocí zástupných znaků. Například v případě očíslovaných souborů jako ve výše uvedených příkladech můžete rozsah specifikovat pomocí závorek takto:

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