Home > Back-end >  Writing the output of a command to specific columns of a csv file, unix
Writing the output of a command to specific columns of a csv file, unix

Time:11-11

I wanted to write the output of command to specific columns (3rd and 5th) of the csv file.

#!/bin/bash
echo -e "Value,1\nCount,1" >> file.csv
echo "Header1,Header2,Path,Header4,Value,Header6" >> file.csv
sed 'y/ /,/' input.csv >> file.csv

input.csv in the above snippet will look something like this

1234567890 /training/folder
0325435287 /training/newfolder

Current output of file.csv

Value,1
Count,1
Header1,Header2,Path,Header4,Value,Header6
1234567890,/training/folder
0325435287,/training/newfolder

Expected Output of file.csv

Value,1
Count,1
Header1,Header2,Path,Header4,Value,Header6
,,/training/folder,,1234567890,
,,/training/newfolder,,0325435287,

CodePudding user response:

You can use awk instead of sed

cat input.csv | awk '{print ",," $1 "," $2 ","}' >> file.csv

awk can process a stdin input by line to line. It implements a print function and each word is processed as a argument (in your case, $1 and $2). In the above example, I added ,, and , as an inline argument.

CodePudding user response:

You can trivially add empty columns as part of your sed script.

sed 'y/ /,/;s/,/,,/;s/^/,,/;s/$/,/' input.csv >> file.csv

This replaces the first comma with two, then adds two up front and one at the end.

Your expected output does not look like valid CSV, though. This is also brittle in that it will fail for any file names which contain a space or a comma.

  • Related