How to add 100 spaces at end of each line of a file in Unix

后端 未结 7 1216
名媛妹妹
名媛妹妹 2021-01-12 07:17

I have a file which is supposed to contain 200 characters in each line. I received a source file with only 100 characters in each line. I need to add 100 extra white spaces

相关标签:
7条回答
  • 2021-01-12 07:27

    Updated after Glenn's suggestion

    Somewhat how Glenn suggests in the comments, the substitution is unnecessary, you can just add the spaces - although, taking that logic further, you don't even need the addition, you can just say them after the original line.

    perl -nlE 'say $_," "x100' file
    

    Original Answer

    With Perl:

    perl -pe 's/$/" " x 100/e' file
    

    That says... "Substitute (s) the end of each line ($) with the calculated expression (e) of 100 repetitions of a space".

    If you wanted to pad all lines to, say, 200 characters even if the input file was ragged (all lines of differing length), you could use something like this:

    perl -pe '$pad=200-length;s/$/" " x $pad/e'
    

    which would make up lines of 83, 102 and 197 characters to 200 each.

    0 讨论(0)
  • 2021-01-12 07:28

    Another way in GNU awk using string-manipulation function sprintf.

    awk 'BEGIN{s=sprintf("%-100s", "");}{print $0 s}' input-file > file-with-spaces
    

    A proof with an example:-

    $ cat input-file
    1234jjj hdhyvb 1234jjj
    6789mmm mddyss skjhude
    khora77 koemm  sado666
    nn1004  nn1004 457fffy
    $ wc -c input-file
          92 input-file
    $ awk 'BEGIN{s=sprintf("%-100s", "");}{print $0 s}' input-file > file-with-spaces
    $ wc -c file-with-spaces
          492 file-with-spaces
    
    0 讨论(0)
  • 2021-01-12 07:29

    You can use printf in awk:

    awk '{printf "%s%*.s\n", $0, 100, " "}' filename > newfile
    

    This printf will append 100 spaces at the end of each newline.

    0 讨论(0)
  • 2021-01-12 07:31

    With awk

    awk '{printf "%s%100s\n", $0, ""}' file.dat
    

    $0 refers to the entire line.

    0 讨论(0)
  • 2021-01-12 07:36

    If you want to have fixed n chars per line (don't trust the input file has exact m chars per line) follow this. For the input file with varying number of chars per line:

    $ cat file
    1
    12
    123
    1234
    12345
    

    extend to 10 chars per line.

    $ awk '{printf "%-10s\n", $0}' file | cat -e
    
    1         $
    12        $
    123       $
    1234      $
    12345     $
    

    Obviously change 10 to 200 in your script. Here $ shows end of line, it's not there as a character. You don't need cat -e, here just to show the line is extended.

    0 讨论(0)
  • Just in case you are looking for a bash solution,

    while IFS=  read -r line
        do
        printf "%s%100s\n" "$line" 
    done < file > newfile
    

    Test

    Say I have a file with 3 lines it it as

    $ wc -c file
          16 file
    $ wc -c newfile
         316 newfile
    

    Original Answer

    spaces=$(echo {1..101} | tr -d 0-9)
    while read line
        do
        echo -e "${line}${spaces}\n" >> newfile
    done < file
    
    0 讨论(0)
提交回复
热议问题