用n个零填充列并修剪多余的值

时间:2019-03-11 15:52:01

标签: awk sed

例如原始数据文件

file.org

1  2  3  4  5
6  7  8  9  0
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

在第2列中插入三个数据点(0) 输出文件应如下所示

file.out

1  0  3  4  5
6  0  8  9  0
11 0  13 14 15
16 2 18 19 20
21 7 23 24 25

请帮助。

3 个答案:

答案 0 :(得分:3)

以下awk将达到目的:

awk -v n=3 '{a[NR]=$2; $2=a[NR-n]+0}1' file

答案 1 :(得分:2)

$ awk -v n=3 '{x=$2; $2=a[NR%n]+0; a[NR%n]=x} 1' file
1 0 3 4 5
6 0 8 9 0
11 0 13 14 15
16 2 18 19 20
21 7 23 24 25

答案 2 :(得分:0)

编辑:由于OP已编辑问题,因此请根据新问题添加解决方案。

awk -v count=3 '++val<=count{a[val]=$2;$2=0} val>count{if(++re_count<=count){$2=a[re_count]}} 1' Input_file

输出如下。

1 0 3 4 5
6 0 8 9 0
11 0 13 14 15
16 2 18 19 20
21 7 23 24 25


请您尝试以下。

awk -v count=5 '
BEGIN{
  OFS="\t"
}
$2{
  val=(val?val ORS OFS:OFS)$2
  $2=0
  occ++
  $1=$1
}
1
END{
  while(++occ<=count){
     print OFS 0
  }
  print val
}'   Input_file

输出如下。

1   0   3   4   5
6   0   8   9   0
11  0   13  14  15
    0
    0
    2
    7
    12