вид CSV числом столбца в строках?

[1174294] Ваш [1174690]nmap[1174691] пытается [1174692] запросить [1174693] DNS-серверы для разрешения имен хостов, связанных с IP-адресами, которые вы сканируете. [12120] Потому что это не может быть успешно выполнено, но ты получаешь дополнительную задержку за это время. [12121] Во избежание этого используйте опцию [1174872]-n[1174873] с [1174874]nmap[1174875].[1174695] Это было бы так: Однако, если бы у вас был правильно настроенный локальный DNS-сервер, он, скорее всего, ответил бы быстро (обычно говорят, что имя хоста не соответствует), и вы бы не заметили эту проблему в первую очередь. [1174301]
1
25.11.2014, 14:51
3 ответа

Думаю, это то, чего ты хочешь
Добавьте -F, для разделения запятых.
Например, awk -F, '$(NF+1)=NF' file

Add Number to end of rows

 awk '$(NF+1)=NF' file

Input

1
1 2 3
1 2
1 2 3 4 5 6
a b

Output

1 1
1 2 3 3
1 2 2
1 2 3 4 5 6 6
a b 2

Sort Rows

 awk '{a[NF]=a[NF]?a[NF]"\n"$0:$0;x=x<NF?NF:x}END{for(i=1;i<=x;i++)if(i in a)print a[i]}'

Input

1
1 2 3
1 2
1 2 3 4 5 6
a b

Output

1
1 2
a b
1 2 3
1 2 3 4 5 6

Print to different files

Используя длину поля 4, например, измените на 134 или что угодно для вашего

 awk '{print > (NF>=4?"LargeFile.txt":"SmallFile.txt")}' file 

Input

1
1 2 3
1 2
1 2 3 4 5 6
a b

Output

LargeFile. txt

 1 2 3 4 5 6

SmallFile.txt

1
1 2 3
1 2
a b
2
27.01.2020, 23:17

Это добавит количество полей (разделенных запятыми) в начало каждой строки, выведет строку, а затем отсортирует все:

awk -F"," '{print NF,$0}' *csv | sort -nk1,1

-n является числовой сортировкой, а -k1,1 гарантирует, что она отсортирована только на первом поле. Чтобы удалить количество полей после сортировки, используйте:

awk -F"," 'print NF,$0' *csv | sort -nk1,1 | cut -d ' ' -f 2- 

-n: В зависимости от Ваших реальных данных, это очень легко прервется. Могут ли быть запятые внутри полей? Могут ли у вас быть поля, состоящие из нескольких строк? Это очень наивный подход и не может с этим справиться.

1
27.01.2020, 23:17

, похожий на ответ @ Terdon, но с SED :

{ seq -s, 10; seq -s, 5; seq -s, 15; } | 
tee - -

Это моя непрерывная - похоже:

1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

Я могу потом сделать:

sed 'h;s/[^,]*//g;G;s/\n/ /' | sort -t\  -nk1,1

.. . что получается ...

,,,, 1,2,3,4,5
,,,, 1,2,3,4,5
,,,, 1,2,3,4,5
,,,,,,,,, 1,2,3,4,5,6,7,8,9,10
,,,,,,,,, 1,2,3,4,5,6,7,8,9,10
,,,,,,,,, 1,2,3,4,5,6,7,8,9,10
,,,,,,,,,,,,,, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
,,,,,,,,,,,,,, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
,,,,,,,,,,,,,, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

Числа не там, но считается, что считается, я думаю. Чтобы удалить ведущие запятые, я могу просто сделать:

PIPELINE | sed 's/,* //'

... что получает ...

1,2,3,4,5
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

, возможно, не самый благоприятный ответ до сих пор, но основная причина, по которой я решил написать, что вы упомянули, что хотите написать Линии с 134 запятыми, разделяемыми запятыми в другой файл. Это, как это происходит, это простое дело с SED . Например, - скажем, я хотел написать линии с 10 полями из вышеуказанной последовательности в File2 :

PIPELINE | sed '/^\([^,]*,[^,]*\)\{9\}$/w file2'
cat file2

:

PIPELINE | sed '/^\([^,]*,[^,]*\)\{9\}$/w file2'
cat file2

. Выход

1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10

Я использую \ {9} выше, потому что Он указывает 9 экземпляров шаблона - что составляет 9 разделителей до 10 разделителей. Диапазоны просто обрабатываются также:

PIPELINE | sed '/^\([^,]*,[^,]*\)\{4,9\}$/w file2'
cat file2

Выход

1,2,3,4,5
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
2
27.01.2020, 23:17

Теги

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