jOSe
jOSe

Reputation: 707

Join lines from file using linux

I was looking for something like this. I have an demo.txt file which contains words a follows

bold
code
make
links
placing
line
return

where I'm willing to achieve the result as

bold
code
make
links
placing
line
return
bold code
code make
make links
links placing
placing line
line return
bold code make
code make links
make links placing
links placing line
placing line return

sed or awk or scripts can be helpful

Upvotes: 0

Views: 76

Answers (1)

glenn jackman
glenn jackman

Reputation: 247012

words_per_line() {
    local n=$(($1-1)) i j
    for ((i=0; i<${#words[@]}-n; i++)); do
        for ((j=0; j<=n; j++)); do
            printf "%s " ${words[i+j]}
        done
        echo
    done 
}

mapfile -t words < demo.txt     # read the file into a zero-indexed array

words_per_line 1
words_per_line 2
words_per_line 3

outputs

bold 
code 
make 
links 
placing 
line 
return 
bold code 
code make 
make links 
links placing 
placing line 
line return 
bold code make 
code make links 
make links placing 
links placing line 
placing line return 

This produces the same output:

ruby -e '1.upto(3) {|n| ARGV.each_cons(n) {|a| puts a.join(" ")}}' $(< demo.txt)

Upvotes: 2

Related Questions