Как разделить текстовый файл на новые файлы?

Как разделить текстовый файл на новые файлы?

У меня есть текстовый файл в следующем формате:

001|fileA
002|fileA
003|fileA
004|fileB
005|fileB
006|fileC
.
.
.
xxx|fileX

Мне нужно разделить этот файл на файлы, соответствующие каждому "|". Имена новых файлов такие: fileA ,fileB,fileC...fileX .

решение1

пытаться

 awk -F\| '{ print $1 > $2 ; }' file

где

  • -F\|указать awk, что следует использовать |в качестве разделителя |, необходимо экранировать.
  • > $2перенаправить вывод на $2значение .

в случае большого количества (> 10) файлов:

for x in $(awk -F\| '!a[$2]++ { print $2}' file)
do
    awk -F\| -v f="$x" '$2 == f { print $1}' file > "$x"
done
  • первый awk просто перечисляет уникальные имена файлов
  • 52 файла — это нормально, но если файлов сотни, это может замедлить работу.

еще одна альтернатива, при условии, что поля «безопасны» для помещения в оболочку

awk -F\| '{printf "echo %s >> %s\n",$1,$2;}' file | bash
  • обязательно удалите fileX перед повторным запуском.

Связанный контент