Awk--将字符串拆分为长度为n的子字符串

use*_*042 2 awk

我熟悉awk程序中使用的函数split().我想知道如何使用它将字符串拆分成长度为n的较小字符串?像(n设置为2)的东西:

输入:

abcdefgh
Run Code Online (Sandbox Code Playgroud)

输出:

ab cd ef gh
Run Code Online (Sandbox Code Playgroud)

Ed *_*ton 8

既然你接受了一个非split()解决方案,这里有一个非gawk特定的,简短的,可能更快的:-):

$ awk '{gsub(/.{2}/,"& ")}1' file
ab cd ef gh

$ awk '{gsub(/.{3}/,"& ")}1' file
abc def gh
Run Code Online (Sandbox Code Playgroud)

就像你接受的基于循环的那个一样,当输入字符串是你想要分割的字符数的精确倍数时,它会添加一个尾随空白字符.

  • +1 .. 这比公认的答案要好得多;例如,如果您想将字符串拆分为 50 或 100 个长度段。 (2认同)

daw*_*awg 1

gawk你一起还可以做:

$ echo 'abcdefgh' | awk -F '' '{ for(i=1; i<=NF; i+=2) {printf "%s%s ", $i,$(i+1);}}'
ab cd ef gh 
Run Code Online (Sandbox Code Playgroud)

来自 gawk手册

FS==“”

记录中的每个单独字符都成为一个单独的字段。(这是一个 gawk 扩展;POSIX 标准未指定它。)

  • 我相信这是 gawk 特有的,仅供记录。 (2认同)