我有一个看起来像这样的文件:
import pygame
我必须得到以下输出:
FirstSentences1 bfjkjhdfhizhfzibfkjezfzfiuzehfizdjfldfsdfsljfklj
SecondSentences2 fjlskdjfjoijrgeojrgijgoejrgrjgiorjofgjeirjgoergd
.
.
.
NthhhSentencesN klkdlffjsldfsljflsfjlskfjldkjflsfjlfkdjfdfjojjij
说明:
例如第一行:
FirstSentences1 bfjkjhdfhizhfzibfkje
FirstSentences1 zfzfiuzehfizdjfldfsd
FirstSentences1 fsljfklj
SecondSentences2 fjlskdjfjoijrgeojrgi
SecondSentences2 jgoejrgrjgiorjofgjei
SecondSentences2 rjgoergd
.
.
.
NthhhSentencesN klkdlffjsldfsljflsfj
NthhhSentencesN lskfjldkjflsfjlfkdjf
NthhhSentencesN dfjojjij
我们取字符串“bfjkjhdfhizhfzibfkjezfzfiuzehfizdjfldfsdfsljfklj”,当长度等于20时我们将它包裹起来
你知道一种方法吗?
答案 0 :(得分:2)
使用substr
:
awk '{ for(i=0;i<length($2);i=i+20) print $1,substr($2,i,20) }' file
答案 1 :(得分:2)
您可以使用字符串索引和嵌套循环使用短脚本执行此操作:
#!/bin/bash
declare -i len=${2:-20} ## take length as 2nd arg (filename is 1st)
while read -r line; do ## read each line
while [ ${#line} -gt 0 ]; do ## if characters remain
printf "%s\n" "${line:0:$((len))}" ## print len chars
line="${line:$((len))}" ## strip len chars from line
done
done < "$1"
示例输入文件
$ cat dat/longsent.txt
bfjkjhdfhizhfzibfkjezfzfiuzehfizdjfldfsdfsljfklj
fjlskdjfjoijrgeojrgijgoejrgrjgiorjofgjeirjgoergd
示例使用/输出
以默认 20-chars
每行包装:
$ bash wrap.sh dat/longsent.txt
bfjkjhdfhizhfzibfkje
zfzfiuzehfizdjfldfsd
fsljfklj
fjlskdjfjoijrgeojrgi
jgoejrgrjgiorjofgjei
rjgoergd
以每行10
个字符包装:
$ bash wrap.sh dat/longsent.txt 10
bfjkjhdfhi
zhfzibfkje
zfzfiuzehf
izdjfldfsd
fsljfklj
fjlskdjfjo
ijrgeojrgi
jgoejrgrjg
iorjofgjei
rjgoergd
注意:您应该验证len
是否大于0
,并且可以将|| test -n "$line"
添加到第一个while子句以适应非POSIX行在最后一行结束(为简洁起见省略)。
包括行前缀
如果您的数据文件包含前缀(例如FirstSentence1
,...
),并且您需要在输出中包含这些前缀,则只需在{{1}之前添加prefix
的读数在每个换行之前输出line
(有一些合理的字段宽度,左对齐)。 e.g:
prefix
示例输入文件带前缀
#!/bin/bash
declare -i len=${2:-20} ## take length as 2nd arg (filename is 1st)
declare -i wdth=22 ## set min field width for prefix (so cols align)
while read -r prefix line; do ## read each line
while [ ${#line} -gt 0 ]; do ## if characters remain
## print len chars w/prefix width set to wdth, left-justified
printf "%-*s %s\n" $wdth "$prefix" "${line:0:$((len))}"
line="${line:$((len))}" ## strip len chars from line
done
done < "$1"
示例使用/输出
$ cat dat/longsentpfx.txt
FirstSentence1 bfjkjhdfhizhfzibfkjezfzfiuzehfizdjfldfsdfsljfklj
SecondSentences2 fjlskdjfjoijrgeojrgijgoejrgrjgiorjofgjeirjgoergd
如果您还有其他问题,请与我们联系。
注意:要将宽度设置为超过最长$ bash wrap.sh dat/longsentpfx.txt
FirstSentence1 bfjkjhdfhizhfzibfkje
FirstSentence1 zfzfiuzehfizdjfldfsd
FirstSentence1 fsljfklj
SecondSentences2 fjlskdjfjoijrgeojrgi
SecondSentences2 jgoejrgrjgiorjofgjei
SecondSentences2 rjgoergd
$ bash wrap.sh dat/longsentpfx.txt 10
FirstSentence1 bfjkjhdfhi
FirstSentence1 zhfzibfkje
FirstSentence1 zfzfiuzehf
FirstSentence1 izdjfldfsd
FirstSentence1 fsljfklj
SecondSentences2 fjlskdjfjo
SecondSentences2 ijrgeojrgi
SecondSentences2 jgoejrgrjg
SecondSentences2 iorjofgjei
SecondSentences2 rjgoergd
的一个字符,您需要在实际编写包裹的行之前读取所有prefix
值以查找最长的宽度,然后添加prefix
。如果您的数据文件很短,您可以将前缀和行读入一对索引数组并首先扫描前缀数组中的长度,如果数据文件很大,则可以扫描文件两次(不是最佳),或者你可以设置一些预定的宽度,如上所述。
答案 2 :(得分:1)
举个例子,你可以这样做:
addstr(line.c_str());