Как с помощью awk разбить строку на две, если длина больше 7? [closed]

Используйте подстановку команды :

tail -f "$(ls -1r *.log | head -n 1)"

Это запускает ls -1r * .log | head -n 1 в подоболочке, берет его выходные данные и создает новую команду, используя их; поэтому, если канал ls выводит data170216.log , команда становится

tail -f "data170216.log"

, что вам и нужно.

Примечание head -n 1 вместо head -1 ; последняя форма сейчас устарела.

2
12.05.2016, 20:31
4 ответа

Вы можете использовать awk , как предлагается в других ответах, но вы также можете использовать fmt

fmt -s -w8 file
What is
life?
how are
you?
hi
whatup
this
is more
than
6
27.01.2020, 21:48

Чтобы получить желаемый результат с помощью sed:

$ sed -e 's/.\{7\} /&\
/' <file
What is 
life?
how are 
you?
hi
whatup
this is 
more than

Поскольку 8-й символ в вашем вводе всегда пробел, это помогло.

Если вы хотите прерваться на 7-м символе независимо от 8-го:

$ sed -e 's/./\
&/8' <file
1
27.01.2020, 21:48

Хотя вы можете сделать это в awk:

$ awk '{sub(/.{8}/,"&\n"); print}' file
What is
life?
how are
you?
hi
whatup
this is
more than

это действительно не лучший инструмент для данной работы. Вы можете сделать то же самое более просто с помощью:

$ fold -sw 8 file
What is 
life?
how are 
you?
hi
whatup
this is 
more 
than

Вы также можете использовать Perl:

$ perl -pe 's/.{8}/$&\n/' file
What is 
life?
how are 
you?
hi
whatup
this is 
more than
10
27.01.2020, 21:48

with

awk 'length < 7 { print ; next ; } 
         { printf "%s\n%s\n",substr($0,0,7),substr($0,8) }' file.txt

result is

What is
 life?
how are
 you?
hi
whatup
this is
 more than

to skip white char use

awk 'length < 7 { print ; next ; } 
    { printf "%s\n",substr($0,0,7) ; 
      i=8 ; while (substr($0,i,1) == " " ) i++; printf "%s\n",substr($0,i) }'
2
27.01.2020, 21:48

Теги

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