Как удалить столбцы? - PullRequest
       8

Как удалить столбцы?

3 голосов
/ 15 марта 2010

Я создал следующий текстовый файл ниже:

fe120b99164f151b28bf86afa6389b22 -rw-r--r-- 1 joey joey 186 2010-03-14 19:26 Descript.txt
41705ea936cfc653f273b5454c1cdde6 -rw-r--r-- 1 joey joey  30 2010-03-14 20:29 listof.txt
0e25cca3222d32fff43563465af03340 -rw-r--r-- 1 joey joey  28 2010-03-14 23:35 sedexample.txt
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey   0 2010-02-16 15:11 test1.txt
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey   0 2010-02-16 15:11 test2.txt
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey   0 2010-02-16 15:11 test3.txt
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey   0 2010-02-16 15:11 test4.txt
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey   0 2010-02-16 15:11 test5.txt
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey   0 2010-02-16 15:11 test6.txt
f5c7f1856249d0526be10df5bd5b895a -rw-r--r-- 1 joey joey  26 2010-03-13 14:13 testingfile.txt
d41d8cd98f00b204e9800998ecf8427e -rw-r--r-- 1 joey joey   0 2010-03-15 00:28 uniquelist.txt

В основном я хотел бы избавиться от столбца access, amount, столбца user и group. Другими словами, я хочу избавиться от колонок 3,4,5. Я попытался использовать cut, чтобы сохранить нужные столбцы и иметь «» в качестве разделителя, однако из-за размера файла он портится, используя «пробел» в качестве разделителя. Любые советы будут высоко ценится! О, просто чтобы добавить, я хотел бы сохранить вывод в виде другого текстового файла. Большое спасибо!

Ответы [ 8 ]

4 голосов
/ 15 марта 2010

как выглядит ваша cut команда?

$ cut -d" " -f1,6- file
fe120b99164f151b28bf86afa6389b22 186 2010-03-14 19:26 Descript.txt
41705ea936cfc653f273b5454c1cdde6  30 2010-03-14 20:29 listof.txt
0e25cca3222d32fff43563465af03340  28 2010-03-14 23:35 sedexample.txt
d41d8cd98f00b204e9800998ecf8427e   0 2010-02-16 15:11 test1.txt
d41d8cd98f00b204e9800998ecf8427e   0 2010-02-16 15:11 test2.txt
d41d8cd98f00b204e9800998ecf8427e   0 2010-02-16 15:11 test3.txt
d41d8cd98f00b204e9800998ecf8427e   0 2010-02-16 15:11 test4.txt
d41d8cd98f00b204e9800998ecf8427e   0 2010-02-16 15:11 test5.txt
d41d8cd98f00b204e9800998ecf8427e   0 2010-02-16 15:11 test6.txt
f5c7f1856249d0526be10df5bd5b895a  26 2010-03-13 14:13 testingfile.txt
d41d8cd98f00b204e9800998ecf8427e   0 2010-03-15 00:28 uniquelist.txt

при необходимости перенаправить на новый файл.

Или awk

$ awk '{$2=$3=$4=$5="";gsub(/ +/," ")}1' file
fe120b99164f151b28bf86afa6389b22 186 2010-03-14 19:26 Descript.txt
41705ea936cfc653f273b5454c1cdde6 30 2010-03-14 20:29 listof.txt
0e25cca3222d32fff43563465af03340 28 2010-03-14 23:35 sedexample.txt
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test1.txt
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test2.txt
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test3.txt
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test4.txt
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test5.txt
d41d8cd98f00b204e9800998ecf8427e 0 2010-02-16 15:11 test6.txt
f5c7f1856249d0526be10df5bd5b895a 26 2010-03-13 14:13 testingfile.txt
d41d8cd98f00b204e9800998ecf8427e 0 2010-03-15 00:28 uniquelist.txt
3 голосов
/ 15 марта 2010

Труба через awk '{print $1 $6 $7 $8 $9;}'?

3 голосов
/ 15 марта 2010

Легко делается как труба-оболочка.

cut --delimiter=' ' --fields=3-5 --complement

Если вам действительно нужно сделать это в C, вы можете запустить эту команду в подпроцессе через popen.

Если бы у вас были смешанные пробелы и разделители табуляции, вам нужно было бы преобразовать одно в другое, поскольку cut не любит множественные разделители. Сделайте это с tr или col -x.

2 голосов
/ 15 марта 2010

Вы должны сделать это в C? Это было бы проще сделать на языке сценариев, таких как perl или даже awk.

awk '{print $1 $6 $7 $8 $9}' file.txt
0 голосов
/ 15 марта 2010
$ perl -lane'$, = " "; print @F[0,5..$#F]' input.txt

ПРИМЕЧАНИЕ. Помимо cut версии он заменяет два или более пробелов на входе одним пробелом, например, он может разбивать имена файлов на входе.

0 голосов
/ 15 марта 2010

Я попытался использовать awk '{print $ 1 $ 6 $ 7 $ 8 $ 9}' file.txt, однако он дает мне следующий вывод:

fe120b99164f151b28bf86afa6389b221862010-03-1419: 26Descriptions.txt 41705ea936cfc653f273b5454c1cdde6302010-03-1420: 29listofnumbers.txt 0e25cca3222d32fff43563465af03340282010-03-1423: 35sedexample.txt d41d8cd98f00b204e9800998ecf8427e02010-02-1615: 11test1.txt d41d8cd98f00b204e9800998ecf8427e02010-02-1615: 11test2.txt d41d8cd98f00b204e9800998ecf8427e02010-02-1615: 11test3.txt d41d8cd98f00b204e9800998ecf8427e02010-02-1615: 11test4.txt d41d8cd98f00b204e9800998ecf8427e02010-02-1615: 11test5.txt d41d8cd98f00b204e9800998ecf8427e02010-02-1615: 11test6.txt f5c7f1856249d0526be10df5bd5b895a262010-03-1314: 13testingfile.txt d41d8cd98f00b204e9800998ecf8427e02010-03-1500: 28uniquelist.txt

Все столбцы соединились в одну, что не идеально для меня, так как я буду использовать uniq one this в какой-то момент. Спасибо за вашу помощь!

0 голосов
/ 15 марта 2010

Я чувствую запах домашней работы, но я принесу вам пользу от сомнений.

Вырезать будет работать, но вам нужно объединить один или несколько пробелов в один первый:

sed "s/ \+/ /g" input_file | cut -d' ' -f-2,6-

Чтобы сохранить вывод любой команды в файл, это command > file.

0 голосов
/ 15 марта 2010

Попробуйте открыть их в Excel с пробелом в качестве разделителя, удалите его там. Посмотрите, работает ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...