У меня есть простой текстовый файл, названный "примером".
Чтение с терминальной командой: cat example
Вывод:
abc cdef ghi jk lmnopq rst uv wxyz
Я хочу преобразовать (преобразовывают) в следующую форму: (ожидаемый вывод от cat example
)
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz
Как я могу сделать это через командную строку?
(Это - только файл в качестве примера, я хочу преобразовать положение слова в вертикальном столбце),
Несколько вариантов:
классик, используйте tr
:
tr ' ' '\n' < example
Использование cut
cut -d ' ' --output-delimiter=
Использование sed
sed 's/ /\n/g' example
Использование perl
perl -pe 's/ /\n/g' example
Использование оболочка
foo=$(cat example); echo -e ${foo// /\\n}
Использование sed
sed 's/ /\n/g' example
Использование perl
perl -pe 's/ /\n/g' example
Использование оболочка
foo=$(cat example); echo -e ${foo// /\\n}
Попробуйте ниже Примера команды
awk -v RS=" " '{print}' file
ИЛИ
awk -v RS='[\n ]' '{print}' file
:
$ awk -v RS=" " '{print}' example
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz
Объяснение:
RS (Рекордный разделитель) является встроенной awk переменной. В первой команде значение, данное переменной Разделителя записей, является пространством. таким образом, awk повреждает строку от печати каждый раз, когда это находит пространство.
Во второй команде, значение, данное переменной RS, является пространством или символом новой строки. Эта команда устраняет дополнительную пустую строку, появившуюся при выполнении первой команды.
Можно использовать xargs
,
cat example | xargs -n 1
или, лучше
xargs -n 1 < example
Используя perl
острота:
perl -p -i -e 's/\s/\n/g' example
Это заменит пробелы, и вкладки с "ВХОДЯТ" (иначе \n
)
Никакой отправленный Python, таким образом, вот то, что:
python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt
Мы перенаправляем входной файл в python
stdin поток и читаем его линию за линией. Каждая строка лишена своего запаздывания новой строки, разделена на слова и затем воссоединена в одну строку, где каждое слово разделяется новой строкой. Это сделано, чтобы гарантировать наличие одного слова на строку и избежать нескольких новых строк, вставляемых в случае, если существует несколько пробелов друг рядом с другом. В конечном счете мы заканчиваем со списком строк, к которому с другой стороны присоединяются в большую строку и распечатывают к stdout потоку. Тот позже может быть перенаправлен в другой файл с > out.txt
перенаправление.
Подобный 'TR' выше, но с дополнениями:
Также работы для вкладок
Преобразовывает несколько пробелов или вкладок к 1 новой строке
tr -s '[:space:]' '\n' < example