передать несколько аргументов в виде одной строки во внешнюю программу

sed 's/\(\([^,]\+,\)\{3\}\)/\1\n/g;s/,\n/\n/g' filename

Я знаю, что вы просили awkрешение, и теперь я попытаюсь представить его как редактирование этого ответа, но для меня решение sedбыло проще...... и пользователь john1024 опередить меня с прекрасным awkраствором. Смотрите там. Его решение pasteи tr, вероятно, является наиболее подходящим классическим ответом в стиле Unix -.

  1. В этом решении используются расширенные функции регулярных выражений GNU sed.

  2. \(..\)— это группа сбора регулярных выражений. Обратите внимание, что решение использует два, один из которых вложен в другой.

  3. [^,]+,— это любая строка, в которой нет запятой, за которой следует запятая. В вашем случае столбец или поле.

  4. \{3\}— множитель регулярного выражения, указывающий на использование предшествующего выражения регулярного выражения три раза.

  5. \1является ссылкой на регулярное выражение -. к предыдущему регулярному выражению.

  6. gозначает сделать это для всех экземпляров в строке.

  7. s/,\n/\n/gудаляет запятую в конце. Здесь необходимо включить символ новой строки, потому что sedвсе еще рассматривает ввод как одну строку.

0
07.02.2020, 11:38
0 ответов

Теги

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