cat data-sample.txt a b c d e f g h aa bb cc dd aa bb cc dd aa bb cc dd 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #NB pay attention to windows double quotes! perl -M"0;$t=qq(\t)" -F"\s+" -le "$.==1?@h=@F:eof?@n=@F:push@l,$F[0]}{print$t,join$t,@h;print join$t,shift@l,map{shift@n}1..$#h,$/while@l" data-sample.txt a b c d e f g h aa 1 2 3 4 5 6 7 8 bb 9 10 11 12 13 14 15 16 cc dd aa bb cc dd aa bb cc dd