根据行的第一个数字插入空白

时间:2017-12-12 10:19:32

标签: awk sed

输入

3abdce    
412ae3    
21dege

预期输出 - 删除行的起始位,并根据该位指定的偏移量插入空白

abd ce
12ae 3
1d ege

我只能删除第一个字符:

sed 's/^.\{1\}//g' file

4 个答案:

答案 0 :(得分:1)

使用gawk,因为它支持空FSOFS

awk -v FS="" -v OFS=""  '{gsub($($1+1),"& ");gsub(/^./,"")}1' inputfile
abd ce
12ae 3
1d ege

此处,FSOFS设置为空白,并且两个gsub函数用于所需的搜索和替换操作。

答案 1 :(得分:1)

这个应该可以解决问题:

awk '{  split($0, a, ""); print substr($0, 2, a[1])" "substr($0, 2+a[1]) }' yourfile

输出:

abd ce 
12ae 3
1d ege

答案 2 :(得分:1)

如果perl没问题

$ perl -F -lane 'print @F[1..$F[0]], " ", @F[$F[0]+1..$#F]' ip.txt
abd ce
12ae 3
1d ege
  • -F -lane拆分空字符串上的每一行,因此每个字符都是一个字段,保存在@F数组
  • 然后根据需要进行打印,索引从0
  • 开始

答案 3 :(得分:1)

GNU awk 解决方案:

awk -v FS="" '{ print substr($0,2,$1), substr($0,$1+2) }' file
  • $1 - 指向第一个数字值(切片大小)

输出:

abd ce  

12ae 3  

1d ege