используйте split -d на MacOS Bash - PullRequest
0 голосов
/ 19 сентября 2018

Когда в linux split -d может использоваться в качестве числового суффикса, начиная с 0, то есть, например,

split -d -l 1500 ${TEMP_FILE} ${OUTPUT_FILE}
    mv "${DATADIR}/${DATASET}/user_artists00" "${DATADIR}/${DATASET}/user_artists.train"
    mv "${DATADIR}/${DATASET}/user_artists01" "${DATADIR}/${DATASET}/user_artists.test"

, но при macOS опция -d отсутствует.По словам человека, у нас есть

 -a suffix_length
             Use suffix_length letters to form the suffix of the file name.

и указано

Если указаны дополнительные аргументы, первый используется в качестве имени входного файла, который нужно разделить.Если указан второй дополнительный аргумент, он используется в качестве префикса для имен файлов, на которые файл разбивается.В этом случае каждый файл, на который этот файл разбивается, именуется префиксом, за которым следует лексически упорядоченный суффикс с использованием символов суффикса_длины в диапазоне `` a-z ''.Если -a не указан, в качестве суффикса используются две буквы.

, поэтому в моем понимании я не могу иметь в качестве выходного файла что-то вроде $ MYINPUT00, $ MYINPUT01 и т. Д., Пока только xaa,xab и т. Д. По умолчанию, поскольку -a допускает только диапазон [a-z].

Ответы [ 2 ]

0 голосов
/ 31 июля 2019

Вы можете установить brew install coreutils с помощью Homebrew и вместо этого вызвать GNU split gsplit, чтобы использовать аргумент -d.

0 голосов
/ 05 апреля 2019

macOS split - это BSD split, что отличается от GNU split.-d является расширением GNU split.Таким образом, вы не можете использовать числовые суффиксы с BSD split.

Однако, если вы действительно хотите сделать это в macOS, вы можете написать простой дополнительный скрипт, чтобы он работал.

split -l "$linelimit" "$infile" "$prefix"
i=0
# to put "suffixlen" digits at the end
suffixlen=3
for file in "$prefix"*; do
    # to make 2 as 002 etc.
    suffix=$(printf "%0${suffixlen}d" $i)
    # actual renaming
    mv "$file" "$prefix$suffix"
    ((i++))
done
...