Formatting output in bash:
Reference: detailed list

printf "format" contents

%a -- Interprets the associated argument as double, and lowercase letters in C99 the format of hexadecimal floating-point literal
    printf "%a\n" 16 
   Put numbers between % and a to control the format,
    printf "%10a\n" 16 
 
%A -- same as above but with uppecase letters.

%b -- Print the associated argument while interpreting backslash escapes in there. ASCII code table
    printf "\x27\n"       # HEX code for single quote
    printf "%b\n" \\x27   # HEX code, hexadecimal
    printf "%b\n" '\x27'  
    printf "\047\n"       # OCT code for single quote
    printf "%b\n" \\047   # OCT code, octal
    printf "%b\n" '\047'  
    printf "%b\n" \\x40  
    printf "%b\n" \\100 
    printf "%b\t" \\x27 \\047 \\x40 \\100 
    printf "%b " \\x27 \\047 \\x40 \\100 

%c -- Interprets the associated argument as char: only the first character of a given argument is printed.
    printf "%c\n" string 
   Only s will be printed. 

%d -- Print the associated argument as signed decimal number (integer).
    printf "%d\n" 1234567890      
    printf "%3d:" 123 45 6 7890 
    printf "%3d: %03d; %04d, %d\n" 123 45 6 7890 
    printf "%3d:%03d;%04d,%d\n" 123 45 6 7890 
   Add "," for every three digits:
    printf "%'d\n" 1234567890 
     but the format is depending on the environment variable $LC_NUMERIC :
    LC_NUMERIC=lzh_TW printf "%'d\n" 1234567890
     
   Compare with the : label operation in sed. (In this case, t label is used; see also Branching and Flow Control in sed)
   echo "1234567890" | sed -e ':a' -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/' -e 'ta' 
   echo "1234567890" | sed -e ':a' -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' 
   echo "1234567890" | sed -e ':a' -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' 

     or shorter  sed -re ':a;s/(.*[0-9])([0-9]{3})/\1,\2/;ta' 
      Explaination: Suppose the input string is 12342342342343434
         1. Group the digits into two groups using \( and \).
         2. The first group is all the digits up to last three digits. 
            The last three digits gets captured in the 2nd group.
         3. Then the two matching groups get separated by a comma. 
            Then the same rules get applied to the line again and again,
            until all the numbers have been grouped in groups of three digits.
         4. For example, in the first iteration it will be 12342342342343,434
         5. In the next iteration 12342342342,343,434 and goes on till 
            there are less than three digits. ref
         6. sed with -r switch activates the ERE. For portability you can also use -E just like that in grep.

       and its reverse  sed -re ':a;s/([0-9]{3})([0-9].*)/\1,\2/;ta' 

%i -- same as %d

%e -- Interpret the associated argument as double, and print it in <N>±e<N> format.
    printf "%e\n" 10.00   #科學記號
    printf "%+e\n" 10.00  #force print ± signs
%E -- Same as above with capital E.

%f -- Interpret and print the associated argument as floating point number.
    printf "%f\n" 10 
    printf "%10.2f\n" 10 
    printf "%+10.2f\n" 10 
    a=1234567890.986 ; printf "%+10.2f\n" $a 
    a=1234567890.986 ; printf "%+10.2e\n" $a 

%g -- Interprets the associated argument as double, but prints it like %f or %e.
    printf "%03g" 1 2 12 123 
          在 % 和 g 之間沒 「0」 的數字視為控制顯示格式。
   

%o -- Print the associated argument as unsigned octal number (integer).
    printf "%o\n" 32

%x -- Print the associated argument as unsigned hexadecimal number in lowercase.
    printf "%x\n" 32
    printf "%x\n" 31
%X -- same as above but print hex number in uppercase.
    printf "%X\n" 31

%% -- %

Print Unicodes:
   printf "\u967d\u660e\u4ea4\u5927\n" # 陽明交大
   Unicode lookup: https://www.ifreesite.com/unicode-ascii-ansi.htm


loop in bash:

Write shell scripts to generate a 9x9 multiplication tables, using
while....do....done
until....do....done
for......do....done
The output should look like,
$ ./multab.sh 9 9
   1   2   3   4   5   6   7   8   9
   2   4   6   8  10  12  14  16  18
   3   6   9  12  15  18  21  24  27
   4   8  12  16  20  24  28  32  36
   5  10  15  20  25  30  35  40  45
   6  12  18  24  30  36  42  48  54
   7  14  21  28  35  42  49  56  63
   8  16  24  32  40  48  56  64  72
   9  18  27  36  45  54  63  72  81 


Advanced version: Generate 9x9 multiplication table in a formatted output as
1x1=01 1x2=02 1x3=03 1x4=04 1x5=05 1x6=06 1x7=07 1x8=08 1x9=09
2x1=02 2x2=04 2x3=06 2x4=08 2x5=10 2x6=12 2x7=14 2x8=16 2x9=18
3x1=03 3x2=06 3x3=09 3x4=12 3x5=15 3x6=18 3x7=21 3x8=24 3x9=27
4x1=04 4x2=08 4x3=12 4x4=16 4x5=20 4x6=24 4x7=28 4x8=32 4x9=36
5x1=05 5x2=10 5x3=15 5x4=20 5x5=25 5x6=30 5x7=35 5x8=40 5x9=45
6x1=06 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 6x7=42 6x8=48 6x9=54
7x1=07 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 7x8=56 7x9=63
8x1=08 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 8x9=72
9x1=09 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81


Ultimate version: Generate 9x9 multiplication table in a formatted output as
1x1=1  1x2=2  1x3=3  1x4=4  1x5=5  1x6=6  1x7=7  1x8=8  1x9=9
2x1=2  2x2=4  2x3=6  2x4=8  2x5=10 2x6=12 2x7=14 2x8=16 2x9=18
3x1=3  3x2=6  3x3=9  3x4=12 3x5=15 3x6=18 3x7=21 3x8=24 3x9=27
4x1=4  4x2=8  4x3=12 4x4=16 4x5=20 4x6=24 4x7=28 4x8=32 4x9=36
5x1=5  5x2=10 5x3=15 5x4=20 5x5=25 5x6=30 5x7=35 5x8=40 5x9=45
6x1=6  6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 6x7=42 6x8=48 6x9=54
7x1=7  7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 7x8=56 7x9=63
8x1=8  8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 8x9=72
9x1=9  9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81


More about devices



Internet references:


Delete blank lines in the file.

sed -e '/^[ \t] *$/d' -e '/^$/d' file

Exercise 1: Write a shell script to convert 1-letter code to 3-letter code for amino acids. Example website. You may find tables in the Wiki or use the file. Also calcuate its molecular weight in the units of kDa and g/mol.
Exercise 2: Write a shell script to convert convert 3-letter code to 1-letter code for amino acids.
Cut the first 3 characters in various ways:
   cut -c 1-3 
   sed 's/\(...\).*/\1/' 
   awk '{print substr($0,1,3)}'  
or in bash:
   #!/bin/sh 
   cat sample1.txt | while read FILE 
   do 
           SUBSTRING=${FILE:0:3} 
           echo $SUBSTRING 
   done 
Exercise 3: Calculate the GC contents for a input sequence of DNA.