특정 수의 공백으로 구분된 입력에서 텍스트를 래핑하는 방법을 배쉬합니다.

특정 수의 공백으로 구분된 입력에서 텍스트를 래핑하는 방법을 배쉬합니다.

"1 2 6 9 18 19 25 67 89 102 140 187"과 같은 긴 문자열이 있고 숫자 대신 지정된 수의 입력 또는 공백(예: 세 번째 입력에서 접기) ​​뒤에 접기를 원합니다. 그것, 다양해.

답변1

가장 간단한 대답은 아마도 다음과 같습니다.

echo "1 2 6 9 18 19 25 67 89 102 140 187 99 12" | xargs -n 3

답변2

이것은 단어(예: 공백으로 구분된 문자열)에서 표준 입력을 축소하는 Perl 스크립트입니다. 명령줄에서 "단어 수"를 지정할 수 있습니다.

예를 들어,fold-words.pl로 저장하고 실행 가능하게 만듭니다.chmod +x fold-words.pl

#! /usr/bin/perl 

use strict;

my $max = shift ;

while (<>) { 
    my $count = 0;
    foreach my $word (split) {
        print "$word " ;
        $count++ ;
        print "\n" if ($count % $max == 0)
    }
    print "\n" if ($count % $max != 0);
    $count=0;
}

출력 예:

$ echo "1 2 6 9 18 19 25 67 89 102 140 187 99 12"  | ./fold-words.pl 3
1 2 6 
9 18 19 
25 67 89 
102 140 187 
99 12 

(split)임의의 정규식을 사용하도록 변경하면 "단어"에 대한 더 엄격한(심지어 이상한) 정의를 가질 수 있습니다. 예를 들어 (split /\t/)기본 "하나 이상의 공백 문자" 대신 단일 탭에서만 분할됩니다.

답변3

이는 간단한 awk 버전입니다. %3행당 필드 수를 다르게 하려면 3을 변경하세요.

awk '{ for(i=1; i<NF; i++) { printf $i OFS; if (i%3 == 0) { print "" }} printf $i}'

실행 예시:

$ str="one two three four five"
$ echo $str | awk '{ for(i=1; i<NF; i++) { printf $i OFS; if (i%3 == 0) { print "" }} printf $i}'
one two three
four five

관련 정보