У меня есть текстовый файл в следующем формате:
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 перед повторным запуском.