Вырезание последнего столбца в файле и создание нового файла в Unix - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть текстовый файл, который имеет 5 столбцов. Я хочу удалить последний столбец из файла и создать новый файл. Новый файл должен иметь первые 4 столбца из старого файла.

Также файл огромен, 10M записей. Так есть ли способ запустить команду в фоновом режиме? Если это невозможно, тогда это нормально.

Введите:

ID details2 details3 details4 details5

Выход:

ID details2 details3 details4

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Если вам не нужно сохранять исходный файл, он отредактирует его, чтобы удалить последнее слово для каждой строки:

ed file.txt <<'END'
1,$s/ [^ ]\+$//
wq
END

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

$ yes "ID details2 details3 details4 details5" | head -n 10000000 > file
$ wc file
 10000000  50000000 390000000 file
$ time sh -c 'printf "%s\\n" \'1,$s/ [^ ]\\+$//\' wq | ed file'
390000000
300000000
42.11user 34.21system 1:34.61elapsed 80%CPU (0avgtext+0avgdata 1407060maxresident)k
1366408inputs+1894576outputs (4major+351780minor)pagefaults 0swaps

$ yes "ID details2 details3 details4 details5" | head -n 10000000 > file
$ time sh -c 'cut -d" " -f1-4 file > file.new'
0.98user 0.39system 0:01.58elapsed 86%CPU (0avgtext+0avgdata 1700maxresident)k
480inputs+585944outputs (1major+154minor)pagefaults 0swaps
$ wc file file.new
 10000000  50000000 390000000 file
 10000000  40000000 300000000 file.new
 20000000  90000000 690000000 total

1 мин 34 с для ed, 1,5 с для cut

0 голосов
/ 30 апреля 2018

Это удалит последний столбец, независимо от того, сколько столбцов содержит ваш входной файл:

awk 'NF--' inputfile >outputfile
0 голосов
/ 30 апреля 2018

Предполагая, что столбцы данных во входном файле не содержат пробелов, вы можете сделать это:

cut -d' ' -f1-4 input.txt > output.txt &
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...