Думаю, это то, чего ты хочешь
Добавьте -F,
для разделения запятых.
Например, awk -F, '$(NF+1)=NF' file
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
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
Используя длину поля 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
Это добавит количество полей (разделенных запятыми) в начало каждой строки, выведет строку, а затем отсортирует все:
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: В зависимости от Ваших реальных данных, это очень легко прервется. Могут ли быть запятые внутри полей? Могут ли у вас быть поля, состоящие из нескольких строк? Это очень наивный подход и не может с этим справиться.
, похожий на ответ @ 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