Mám 14 souborů, které jsou součástí jednoho textu. Chtěl bych je sloučit do jednoho. Jak to udělat?
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
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ů.
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
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
Můžete určit pattern
souboru a poté je všechny sloučit následujícím způsobem:
cat *pattern* >> mergedfile
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