Сортировка списка и разделение элементов запятыми вместо новой строки

Я нашел ответ. Слишком много попыток подключения во время Наводнения. Я урезал макс. соединения, и это работает как очарование теперь.

2
25.10.2015, 17:52
2 ответа

Использование awk

awk '{printf "%s%s",(NR>1?",":""),$NF;} END{print""}'  /proc/filesystems

Использование sed

sed -r 's/^nodev//; s/^[[:blank:]]*//; H;1h;$!d;x; s/\n/,/g'  /proc/filesystems

Как это работает

  • s / ^ nodev //

    Это исключает nodev с самого начала любой строки

  • s / ^ [[: blank:]] * //

    Это удаляет ведущие пробелы из каждой строки.

  • H

    Добавляет текущую строку к удерживаемому пространству.

  • 1h

    Если мы находимся на первой строке, перезапишите удерживаемое пространство этой строкой.

  • $! D

    Если мы не на последней строке, удалите пространство шаблона и начните заново со следующей строки.

  • х; s / \ n /, / g

    Если мы попадаем сюда, мы оказываемся на последней строчке. В этом случае переместите удерживаемое пространство в пространство шаблона и замените все символы новой строки запятыми.

Чтобы понять это, полезно распознать H; 1h; $! D; x как идиому awk, что означает чтение всего файла.

Дополнительно: сортировка

Чтобы отсортировать имена:

awk '{print $NF;}'  /proc/filesystems | sort | awk '{printf "%s%s",(NR>1?",":""),$NF;} END{print""}'
3
27.01.2020, 21:54

paste является инструментом для этого:

sed 's/.*[[:blank:]]//' /proc/filesystems | paste -sd,
3
27.01.2020, 21:54

Теги

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