Переместите лучшие 1 000 строк от текстового файла до нового файла с помощью команд оболочки Unix

В запросах вы ссылаетесь на TempVars, используя обозначение взрыва:

Where SomeProperty = TempVars!User

Хотя вы могли бы пойти по пути VBA, я, конечно, не рекомендую его, если он может быть решен только с помощью SQL

54
задан John T 28 April 2009 в 19:15
поделиться

5 ответов

head -1000 input > output && sed -i '1,+999d' input

Например:

$ cat input 
1
2
3
4
5
6
$ head -3 input > output && sed -i '1,+2d' input
$ cat input 
4
5
6
$ cat output 
1
2
3
77
ответ дан 7 November 2019 в 07:52
поделиться

Из любопытства я нашел коробку с GNU-версией sed (v4.1.5) и протестировал (без кэширования) производительность двух подходов, предложенных до сих пор, используя текстовый файл из 11M строк:

$ wc -l input
11771722 input

$ time head -1000 input > output; time tail -n +1000 input > input.tmp; time cp input.tmp input; time rm input.tmp

real    0m1.165s
user    0m0.030s
sys     0m1.130s

real    0m1.256s
user    0m0.062s
sys     0m1.162s

real    0m4.433s
user    0m0.033s
sys     0m1.282s

real    0m6.897s
user    0m0.000s
sys     0m0.159s

$ time head -1000 input > output && time sed -i '1,+999d' input

real    0m0.121s
user    0m0.000s
sys     0m0.121s

real    0m26.944s
user    0m0.227s
sys     0m26.624s

Это Linux, с которым я работал:

$ uname -a
Linux hostname 2.6.18-128.1.1.el5 #1 SMP Mon Jan 26 13:58:24 EST 2009 x86_64 x86_64 x86_64 GNU/Linux

По крайней мере, для этого теста выглядит, как sed медленнее, чем подход tail (27 с против ~ 14 с).

11
ответ дан 7 November 2019 в 07:52
поделиться
head -1000 file.txt > first100lines.txt
tail --lines=+1001 file.txt > restoffile.txt
19
ответ дан 7 November 2019 в 07:52
поделиться

Это однострочный, но использует четыре атомарных команды:

head -1000 file.txt > newfile.txt; tail +1000 file.txt > file.txt.tmp; cp file.txt.tmp file.txt; rm file.txt.tmp
7
ответ дан 7 November 2019 в 07:52
поделиться

Подход на Perl:

perl -ne 'if($i<1000) { print; } else { print STDERR;}; $i++;' in 1> in.new 2> out && mv in.new in
4
ответ дан 7 November 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: