На glibc удерживается часовой пояс по умолчанию /etc/localtime
. Это может быть символьной ссылкой на файл в tz базе данных (в этом случае, Вы могли просто readlink), но нет никакой гарантии - это может быть hardlink или даже копия. В этом случае необходимо было бы считать файл и затем сравнить его со всеми файлами в tz каталоге данных.
Я не уверен, какая цель Вы думаете, получая значение America/New_York
будет служить.
Самый простой способ, вероятно, использовать голову
и хвост
:
$ head -n 1000 input-file > output1
$ tail -n +1001 input-file > output2
Это поставит первые 1000 строк из входного файла
в выход1
, а все строки от 1001 до конца в выход2
Простой способ сделать то, что просит вопрос, за одну команду:
awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile
или, для тех из вас, кто действительно ненавидит печатать длинные, интуитивно понятные команды,
awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile
Я думаю, что SPLIT
Вы лучший подход.
Попробуйте использовать опцию -L XXXX
-L XXXX , где XXXX - это количество строк, которые вы хотите в каждом файле (по умолчанию 1000).
Вы можете использовать опцию -N YY
, если вы больше обеспокоены количеством созданных файлов. Использование -N 2
будет разделить ваш файл только в 2 частях, независимо от количества строк в каждом файле.
Вы можете рассчитывать количество строк в вашем файле с WC -L Filename
. Это команда «WordCount» с вариантом линий.
Человек Сплит
Человек WC
Это задание для csplit
:
csplit -s infile 1001
будет s
неправильно разбивать infile
, первая часть xx00
- до, но не включая строку 1001, а вторая часть xx01
- оставшиеся строки.
Вы можете воспроизводить опции, если вам нужны разные имена выходных файлов, например, используя -f
и указав префикс -f:
csplit -sf piece. infile 1001
создает два файла с именами piece.00
и piece.01
С помощью умной головки
Вы также можете сделать что-то вроде:
{ head -n 1000 > 1st.out; cat > 2nd.out; } < infile