"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