Replace 3rd occurance of SPACE with newline

I have file with SQL output as

0001 firstname1 lastname1 0002 firstname2 lastname2 0003 firstname3 lastname3 0004 firstname4 lastname4

Expected output :

0001 firstname1 lastname1 
0002 firstname2 lastname2 
0003 firstname3 lastname3 
0004 firstname4 lastname4

Let me know if this can be done with simple AWK or SED one liner

Of if I need to do it by updating SQL query which is input to this file, please help me with the sql query details.
Right now my .sql query redirects all output in one single line only.

Which database? Can you show your sql script?

$ cat file
0001 firstname1 lastname1 0002 firstname2 lastname2 0003 firstname3 lastname3 0004 firstname4 lastname4
$ awk 'ORS = !(NR%3)? "\n" : FS ' RS=" "  file
0001 firstname1 lastname1
0002 firstname2 lastname2
0003 firstname3 lastname3
0004 firstname4 lastname4
$ awk '{ for(i=1;i<=NF;i++)printf $i ( i%3 == 0 ? RS : FS ) }'  file
0001 firstname1 lastname1 
0002 firstname2 lastname2 
0003 firstname3 lastname3 
0004 firstname4 lastname4 
2 Likes

Try also

tr ' ' '\n' <file | paste -s -d'  \n'
0001 firstname1 lastname1
0002 firstname2 lastname2
0003 firstname3 lastname3
0004 firstname4 lastname4

Be aware that not all systems accept the \n notion...

1 Like

OR

$ echo '0001 firstname1 lastname1 0002 firstname2 lastname2 0003 firstname3 lastname3 0004 firstname4 lastname4' | xargs -n 3
0001 firstname1 lastname1
0002 firstname2 lastname2
0003 firstname3 lastname3
0004 firstname4 lastname4
xargs -n 3 <file 
1 Like

Hello,

One more approach for same.

xargs -n 3 < get_data_check_details_check121212

Output will be as follows.

0001 firstname1 lastname1
0002 firstname2 lastname2
0003 firstname3 lastname3
0004 firstname4 lastname4

NOTE: Where get_data_check_details_check121212 is input file.

EDIT: Sorry just now saw Akshay have posted the same command.

Thanks,
R. Singh

One more way :slight_smile:

 
printf "%s %s %s\n" $(cat filename)
 
or
 
printf "%s %s %s\n" $(echo '0001 firstname1 lastname1 0002 firstname2 lastname2 0003 firstname3 lastname3 0004 firstname4 lastname4')

Thanks all and Akshay ...

awk 'ORS = !(NR%3)? "\n" : FS ' RS=" "  file

-- This worked for me. But if there no lastname (3rd field is blank) it does not work.

I think If it can be done with simple sql ...

The SQL we are using is simple -

OUTPUT=`sqlplus -s <<EOF
select id, fname, lname from table_name
EOF`
echo $OUTPUT > file1

( I know this should be in different thread of this forum, but this is related to shell script )

Use quotes around shell variable references:

echo "$OUTPUT" > file1

or simply do:

sqlplus -s << EOF > file1
select id, fname, lname from table_name
EOF

Thanks Scrutinizer.... It worked