Команда AWK для печати до конца строки

у меня есть быстрый вопрос относительно команды AWK. Мне нужна команда для печати до конца строки в той же строке, но затем, когда она доберется до следующей строки, Мне нужно, чтобы она напечатала на другой строке. Следующий пример обеспечит большую ясность.

скажем у меня есть файл:

0 1 2 3 This is line one
0 1 2 3 This is line two 
0 1 2 3 This is line three 
0 1 2 3 This is line four

я попробовал следующее и получил следующие результаты

awk '{for(i=5;i<=NF;i++) print $i}' fileName >> resultsExample1

Я получаю следующее в resultsExample1

This
is
line
one
This 
is 
line 
two 
And so on....

пример 2:

awk 'BEGIN {" "} {for(i=5;i<=NF;i++) printf }' fileName >> resultsExample2

для resultsExample2 я получаю:

This is line one This is line two this is line three This is line four

Я тоже пробовал:

awk 'BEGIN {" "} {for(i=5;i<=NF;i++) printf }' fileName >> resultsExample3

но результаты были такими же, как и предыдущий

в конце концов я хочу следующее:

This is line one
This is line two 
This is line three
This is line four

Я благодарен за любую помощь! Заранее спасибо:)

4 ответов


это может быть более прямолинейным в использовании cut:

$ cut -d' ' -f5- file
This is line one
This is line two 
This is line three 
This is line four

Это говорит: на полях, разделенных пробелами, печатайте от 5-го до конца строки.

Если у вас есть несколько пробелов между полями, вы можете изначально сжать их с помощью tr -s' '.


или с awk

awk '{====""; sub(/^  */,"", ); print }'  awkTest2.txt
This is line one
This is line two
This is line three
This is line four

кроме того, вы решение почти там, вам просто нужно заставить "\n " быть напечатанным в конце каждой обработанной строки, т. е.

awk '{for(i=5;i<=NF;i++) {printf $i " "} ; printf "\n"}' awkTest2.txt
This is line one
This is line two
This is line three
This is line four

обратите внимание, что ваш BEGIN { " " } нет op. И вы должны использовать $i вместо для печати текущего значения итераций.

IHTH.

редактировать ; отметив возражение sudo_O, я добавил %s к данным. Вот результат

This is line one
This is line two
This is line three
T%shis is line four

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


Я знаю, что этот вопрос очень старый, но другой пример awk:

awk '{print substr(,index(,))}' fileName

что она делает: найдите индекс, с которого вы хотите начать печать (индекс $5 в $0), и распечатайте подстроку $0, начиная с этого индекса.


awk '{gsub (/[[:digit:]]/,"");{=}}1' file