我有一个长字符串,例如:“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 脚本,它将 stdin 折叠在单词上(即用空格分隔的字符串)。您可以在命令行上指定“字数”。
将其另存为,例如,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