我想用单词计数来打破一个长字符串,然后每达到一定数量的单词就继续显示和中断。
例如。
我有一个字符串:
value="Aug 04 03:49:00.082205 ALERT IPX-NG dropped -- total: 4693845, count: 39254, rate: 1.88% ; OUTPUT QUEUE frampedd: active=1, delivered=73265000210 Aug 04 09:43:00.795817 ALERT IPX-NG dropped -- total: 4765909, count: 72064, rate: 1.91% ; OUTPUT QUEUE frampedd: active=0, delivered=74220627600"
我的预期输出是:
Aug 04 03:49:00.082205 ALERT IPX-NG dropped -- total: 4693845, count: 39254, rate: 1.88% ; OUTPUT QUEUE frampedd: active=1, delivered=73265000210
Aug 04 09:43:00.795817 ALERT IPX-NG dropped -- total: 4765909, count: 72064, rate: 1.91% ; OUTPUT QUEUE frampedd: active=0, delivered=74220627600"
我无法使用字符数,因为数字会有所不同。所以最好的选择是使用字数。
编辑:
嗨,大家好,我尝试使用sed命令,它似乎有效!
sed's /([^ [:space:]] {1,} [[:space:]] {1,}} {19} /& \ n /'
感谢那些有帮助的人......如果有以下情况,你可以给我更好的建议:D ..希望纯粹的bash命令,因为我无法在服务器上安装任何其他扩展程序。
答案 0 :(得分:2)
如果所有字符串计数都没有改变,您可以使用xargs
$ value="Aug 04 03:49:00.082205 ALERT IPX-NG dropped -- total: 4693845, count: 39254, rate: 1.88% ; OUTPUT QUEUE frampedd: active=1, delivered=73265000210 Aug 04 09:43:00.795817 ALERT IPX-NG dropped -- total: 4765909, count: 72064, rate: 1.91% ; OUTPUT QUEUE frampedd: active=0, delivered=74220627600"
$ xargs -n 19 <<< "$value"
Aug 04 03:49:00.082205 ALERT IPX-NG dropped -- total: 4693845, count: 39254, rate: 1.88% ; OUTPUT QUEUE frampedd: active=1, delivered=73265000210
Aug 04 09:43:00.795817 ALERT IPX-NG dropped -- total: 4765909, count: 72064, rate: 1.91% ; OUTPUT QUEUE frampedd: active=0, delivered=74220627600
xargs man
页面说明了这个标志-n
-n max-args, --max-args=max-args
Use at most max-args arguments per command line. Fewer than
max-args arguments will be used if the size (see the -s
option) is exceeded, unless the -x option is given, in which
case xargs will exit.
答案 1 :(得分:1)
在AWK中:
awk '{{gsub(/^value="|"$/,""); for(i=1;i<=NF;i++) printf "%s%s",$i,(i%19?" ":"\n")}' file
或者如果您的字符串实际上不是以value="
开头,那么您可以放弃gsub
:
awk '{for(i=1;i<=NF;i++) printf "%s%s",$i,(i%19?" ":"\n")}' file