Unix 循环单词并提取二元图
我想从一个给定的单词中提取每一个双字符并放入一个文本文件中 例如:Unix 循环单词并提取二元图,unix,awk,sed,text-processing,Unix,Awk,Sed,Text Processing,我想从一个给定的单词中提取每一个双字符并放入一个文本文件中 例如: apple --> ap pp pl le president --> pr re es si id de en nt apple --> ap pl le 我发现类似的工作使用awk和word,但没有关于单词 我刚刚发现了以下代码: sed 's/\(.\{2\}\)/\1 /g' 但它的窗口大小为2 例如: apple -->
apple --> ap pp pl le
president --> pr re es si id de en nt
apple --> ap pl le
我发现类似的工作使用awk和word,但没有关于单词
我刚刚发现了以下代码:
sed 's/\(.\{2\}\)/\1 /g'
但它的窗口大小为2
例如:
apple --> ap pp pl le
president --> pr re es si id de en nt
apple --> ap pl le
谢谢你的帮助
sed 's/\(.\{2\}\)/\1 /g'
预期结果是一个窗口大小为1的二进制字符串。我会这样做:
$ sed 's/./&&/g;s/^.//;s/../& /g;s/ .$//' <<< $'president\napple'
pr re es si id de en nt
ap pp pl le
awk可以很简单地做到这一点:
$ cat file.txt
apple
president
example
another
$ awk '{output=""; for(i=1;i<length($0);i++){ output=output" "substr($0,i,2)} print output }' file.txt
ap pp pl le
pr re es si id de en nt
ex xa am mp pl le
an no ot th he er
如果行前面的空格是一个问题,您可以通过多种方式处理它,例如在子字符串前面追加空格之前检查输出是否为空,或者简单地从该空格后面提取输出的子字符串,例如
$ awk '{output="";for(i=1;i<length($0);i++){ output=output" "substr($0,i,2)} print substr(output,2) }' file.txt
ap pp pl le
pr re es si id de en nt
ex xa am mp pl le
an no ot th he er
{}块内的所有内容都针对每一行执行,因为它没有附加任何条件
output=将每行的输出变量重置为空
fori=1;在GNU awk上,您可以:
$ echo apple | gawk -F "" '{for(i=1;i<NF;)print $i$(++i)}' # or use a file
ap
pp
pl
le
同样适用于mawk和Busybox awk,由于FS字段分隔符为空,所有其他的可能都会失败。FS为空是一种昂贵的方法
$ echo apple | fold -w1 | awk 'p{print p $0} {p=$0}' | xargs
ap pp pl le
使用perl命令行:
echo "apple" | perl -nE'say join " ",/(?<=\K.)./g'
模式只使用一个位置,因为一个点位于lookback中,但是\K给出了返回匹配结果的位置。@karakfa/2g是特定于实现的,适用于GNU-sed,但不一定在其他地方,所以我不想使用它,但另一个我可以裁剪的命令很好。它应该如何处理像a这样的单字符输入?如果单词包含特殊字符会发生什么?例如,应用程序le?结果应该始终是:ap pp p--l le
$ echo 'apple' |
awk '{n=length($0)-1; for (i=1;i<=n;i++) printf "%s%s", substr($0,i,2), (i<n ? OFS : ORS)}'
ap pp pl le