每隔 n 个空格,将该空格替换为换行符

SHELL awk 每隔 n 个空格,将该空格替换为换行符

  • 背景
  • 思路
    • 示例

背景

最近在做一些文本处理的时候代码出了 BUG ,导致整个文件的换行符都变成了空格,需要在正确的位置将空格替换为换行符

思路

使用 awk 的 split 函数对字符串进行数组类型的分割,(类似于 python 中的 split 函数)然后每隔 n 个空格,就将第 1 2 3 … n-1 n 个元素输出

awk 代码如下(n=8 需要每隔 8 个空格就将该空格替换为换行符):

# n = 8 
cat bbb.txt | awk '{len=split($0,a," ");for(i=1;i<=len;i=i+8) print a[i]"\t"a[i+1]"\t"a[i+2]"\t"a[i+3]"\t"a[i+4]"\t"a[i+5]"\t"a[i+6]"\t"a[i+7] }'

示例

[root@test]# cat bbb.txt
a b c d e f g h aa bb cc dd ee ff gg hh aaa bbb ccc ddd eee fff ggg hhh
[root@test]# cat bbb.txt | awk '{len=split($0,a," ");for(i=1;i<=len;i=i+8) print a[i]"\t"a[i+1]"\t"a[i+2]"\t"a[i+3]"\t"a[i+4]"\t"a[i+5]"\t"a[i+6]"\t"a[i+7] }'
a	b	c	d	e	f	g	h
aa	bb	cc	dd	ee	ff	gg	hh
aaa	bbb	ccc	ddd	eee	fff	ggg	hhh

你可能感兴趣的:(随笔)