2015-02-24 3 views
-1

У меня есть текстовый файл, например, как этоУдалите все пробелы между двумя строками символов в оболочке

word 1334 1234 
word word 32423 23423 
word 213 234 
word word 32423 234234 
word 23423 123423 

я хотел бы, чтобы это было так, но игнорировать периоды

word............1334.......1234 
word_word.......32423......23423 
word............213........234 
word_word.......32423......234234 
word............23423......123423 

На последней строке , я хотел бы удалить пустое пространство и внести его в wordword или word_word в сценарий оболочки. У меня проблемы с использованием column, grep и awk. Я думаю, что я должен сохранить его в новый файл, преобразовывая все пробелы в word_word, а затем используя column -t -s " ", чтобы сделать равные пробелы.

+0

Непонятно, что вы хотите. Не могли бы вы отредактировать вопрос, чтобы включить образец желаемого результата? – tripleee

ответ

0

Гадать, что ваш вопрос означает «как я могу заставить эти данные трех столбцов путем удаления каких-либо пробелов между словами в других, чем в двух последних столбцах», я хотел бы предложить

awk '{ f=""; for (i=1; i<=NF-2; ++i) { f=f $i; $i=""; } $1=f; print }' file 

Однако свою последнюю строку только содержит два столбца, поэтому для этого будет создан аберрантный вывод.

$ awk '{ f=""; for (i=1; i<=NF-2; ++i) { f=f $i; $i=""; } $1=f; print }' <<'HERE' 
> word 1334 1234 
> word word 32423 23423 
> word 213 234 
> word word 32423 234234 
> word 123423 
> HERE 
word 1334 1234 
wordword 32423 23423 
word 213 234 
wordword 32423 234234 
123423 

Вы можете вставить буквальное подчеркивание, если хотите; f=f "_" $i

+0

спасибо тройной, я пытаюсь выяснить, почему я могу использовать awk только на .sh в vim. я использую ваш скрипт, а затем используя столбец -t -s "" – numLOCK

+0

является awk более мощным, чем grep? – numLOCK

+0

Можно также использовать gensub, если у вас есть gawk 'awk '{$ 0 = gensub (/ ([[: alpha:]] +) ([[: alpha:]] +) /," \\ 1 _ \\ 2 "," g ")} 1 'file' –

Смежные вопросы