Объединить несколько файлов, содержащих одинаковые идентификаторы - Linux - PullRequest
0 голосов
/ 09 марта 2019

У меня есть 10000 файлов в одной папке, например:

  • 1000.htm
  • Page_1000.html
  • файл-1000.txt
  • 2000.htm
  • Page_2000.html
  • Файл-2000.txt

Я хочу объединить каждый файл с похожим именем

example :
1000.htm Page_1000.html file-1000.txt > 1.txt
2000.htm Page_2000.html file-2000.txt > 2.txt

Я пытаюсь объединить, используя cat , вот так, это работает, но я не могу сделать это в файлах 10k.

cat 1000* > 1.txt 
cat 2000* > 2.txt 

Спасибо

Ответы [ 3 ]

0 голосов
/ 10 марта 2019
find . -name '*.htm' -printf '%P\n' |
while IFS='.' read -r key sfx; do
    cnt=$(( cnt + 1 ))
    cat "${key}.htm" "Page_${key}.html" "file-${key}.txt" > "${cnt}.txt"
done

, хотя вы должны рассмотреть возможность использования ключа в имени выходного файла вместо переменной cnt, чтобы было легко определить, какие входные файлы были включены в выходной файл.

0 голосов
/ 11 марта 2019
i=1;
for ((num = 1000; num < 10000; num+=1000));
do 
cat ${num}.htm Page_${num}.html file-${num}.txt > ${i}.txt
i=$((i + 1));
done

Вы можете изменить число <10000 согласно вашему требованию.</p>

0 голосов
/ 09 марта 2019

Вы, вероятно, не можете этого сделать, потому что globbing (*) пытается расширить до слишком большого количества аргументов.Вместо этого вы можете использовать find, чтобы найти все файлы, соответствующие шаблону, а затем использовать xargs, чтобы выполнить cat для них.

find . -name '1000*' -print0 | xargs -0 cat > 1.txt

'- print0' и '-0' будут разделять нулевой символ (\ 0) вместо символа перевода строки по умолчанию (\ n).Таким образом, файлы с разрывами строк в именах файлов работают как положено.

...