Команда 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, начиная с этого индекса.