Bossjara
Bossjara

Reputation: 43

Pad column with n zeros and trim excess values

For example, the original data file

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

Insert three data points (0) in column 2, The output file should look like this

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

Please help.

Upvotes: 4

Views: 73

Answers (4)

RavinderSingh13
RavinderSingh13

Reputation: 133458

EDIT: Since OP has edited question so adding solution as per new question.

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

Output will be as follows.

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


Could you please try following.

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

Output will be as follows.

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

Upvotes: 0

stack0114106
stack0114106

Reputation: 8711

If you want to try Perl,

$ cat file.orig
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

$ perl -lane ' BEGIN { push(@t,0,0,0) } push(@t,$F[1]);$F[1]=shift @t; print join(" ",@F) ' file.orig
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

$

Upvotes: 0

kvantour
kvantour

Reputation: 26471

The following awk will do the trick:

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

Upvotes: 3

Ed Morton
Ed Morton

Reputation: 203254

$ 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

Upvotes: 2

Related Questions