Добавяне на колона в края на CSV файл с помощта на 'awk' в BASH скрипт

Как се добавя колона в края на CSV файл с помощта на низ в променлива?

input.csv

2012-02-29,01:00:00,Manhattan,New York,234
2012-02-29,01:00:00,Manhattan,New York,843
2012-02-29,01:00:00,Manhattan,New York,472
2012-02-29,01:00:00,Manhattan,New York,516

изход.csv

2012-02-29,01:00:00,Manhattan,New York,234,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhattan,New York,843,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhattan,New York,472,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhattan,New York,516,2012-02-29 16:13:00

awk.sh

#!/bin/bash

awk -F"," '{$6="2012-02-29 16:13:00" OFS $6; print}' input.csv > output.csv

Моят опит по-горе в awk.sh добави низа в края, но премахна всички разделители със запетаи.

awk.sh резултат

2012-02-29 01:00:00 Manhattan New York 234 2012-02-29 16:13:00
2012-02-29 01:00:00 Manhattan New York 843 2012-02-29 16:13:00
2012-02-29 01:00:00 Manhattan New York 472 2012-02-29 16:13:00
2012-02-29 01:00:00 Manhattan New York 516 2012-02-29 16:13:00

Оценявам всяка помощ!

Актуализиран awk.sh

#!/bin/bash

GAWK="/bin/gawk"
TIMESTAMP=$(date +"%F %T")
ORIG_FILE="input.csv"
NEW_FILE="output.csv"

#Append 'Create' DateTimeStamp to CSV for MySQL logging
$GAWK -v d="$TIMESTAMP" -F"," 'BEGIN {OFS = ","} {$6=d; print}' $ORIG_FILE > $NEW_FILE
rm -f $ORIG_FILE

person SirOracle    schedule 29.02.2012    source източник
comment
Не е ли по-скоро „ManhattAn“, отколкото „ManhattEn“?   -  person Jonathan Leffler    schedule 01.03.2012
comment

Трябва да внедрите метод pageLoad в javascript код и да извикате вашата jQuery функция вътре в тази функция. И не можете да използвате click. Трябва да използвате on, ако .togglerElement е вътре в панела за актуализиране.

например:

function pageLoad(){

 $(document).ready(function () {
   $("body").on('click','.togglerElement',function(){
      var target = $(this).attr("id");
      ToggleTest(target);
   });
 });
}

function ToggleTest(target) {
    var container = "#" + target + "Container";
    var arrowUp = "#" + target + "ArrowUp";
    var arrowDown = "#" + target + "ArrowDown";
    $(container).slideToggle("fast");
    $(arrowUp).toggle();
    $(arrowDown).toggle();
}
  -  person SirOracle    schedule 01.03.2012


Отговори (4)


Можете да добавите запетая към OFS (Разделител на изходно поле):

awk -F"," 'BEGIN { OFS = "," } {$6="2012-02-29 16:13:00"; print}' input.csv > output.csv

Изход:

2012-02-29,01:00:00,Manhatten,New York,234,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhatten,New York,843,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhatten,New York,472,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhatten,New York,516,2012-02-29 16:13:00

РЕДАКТИРАНЕ, за да отговорите на коментара на SirOracle:

От страницата на awk man:

       -v var=val
       --assign var=val
              Assign the value val to the variable var, before execution of the program begins.  Such 
              variable values are available to the BEGIN block of an AWK program.

Така че задайте вашата дата на променлива на shell и я използвайте вътре awk:

mydate=$(date)
awk -v d="$mydate" -F"," 'BEGIN { OFS = "," } {$6=d; print}' input.csv > output.csv
person Birei    schedule 29.02.2012
comment
Благодаря @Birei. Не бях сигурен какво е OFS, но сега има смисъл. Опитах вашия код и той проработи. - person SirOracle; 01.03.2012
comment
Знаете ли как мога да добавя датата чрез променлива вместо твърдо кодирания времеви печат? Ще добавя своя преработен код по-горе, за да го видя по-добре. - person SirOracle; 01.03.2012
comment
@SirOracle: Актуализира отговора. - person Birei; 01.03.2012
comment
@Birei, открих, че кодът ти е полезен, пакетирах скрипта ти и го качих като плъгин #sparrow, така че всеки да може да го използва повторно - sparrowhub.org/info/csv-add-column - person Alexey Melezhik; 11.09.2017
comment
@Birei, хубаво благодаря. Как може някой да включи кавичките в низа за вмъкване? Исках да добавя низа 2.4.0 (включително кавички) във втората колона на .csv файл, но кодът по-долу не работи: awk -F"," 'BEGIN { OFS = "," } {$2="\"2.4.0"\"; print}' test.csv > output.csv - person pkaramol; 04.03.2019
comment
...и следното работи, но премахва последната точка от моя 2.4.0 низ awk -F"," 'BEGIN { OFS = "," } {$2="\""2.4.0"\""; print}' test.csv > output.csv - person pkaramol; 04.03.2019
comment
@ Можем ли да добавим и заглавка. Имам данни със заглавка. Как мога да се справя с това. - person avinash; 18.07.2019

I'd do:

awk '{ printf("%s,2012-02-29 16:13:00\n", $0); }' input.csv > output.csv

Това твърдо кодира стойността, но също и вашия код.

Или можете да използвате sed:

sed 's/$/,2012-02-29 16:13:00/' input.csv > output.csv
person Jonathan Leffler    schedule 29.02.2012

Можете да зададете OFS (разделител на изходно поле):

awk -F"," 'BEGIN { OFS = "," } ; {$6="2012-02-29 16:13:00" OFS $6; print}' input.csv >output.csv

което ми дава:

2012-02-29,01:00:00,Manhatten,New York,234,2012-02-29 16:13:00,
2012-02-29,01:00:00,Manhatten,New York,843,2012-02-29 16:13:00,
2012-02-29,01:00:00,Manhatten,New York,472,2012-02-29 16:13:00,
2012-02-29,01:00:00,Manhatten,New York,516,2012-02-29 16:13:00,
person Jörg Beyer    schedule 29.02.2012
comment
Благодаря Йорг Бейер. Премахнах OFS $6, като използвах примера на @Birei по-долу, за да се отърва от запетаята в края. Просто се опитвам да разбера как да добавя променлива на мястото на твърдо кодираната дата. Актуализирах въпроса по-горе с пример. - person SirOracle; 01.03.2012

Ако някой иска да създаде csv файл чрез shell с имена на колони: където първият вход се съхранява в променливи from_time, to_time.

пример: вмъкнете два времеви клейма с from_time и to_time като имена на колони със съответните стойности -

КОД-

FROM_TIME=2020-02-06T00:00:00
TO_TIME=2020-02-07T00:00:00
{ echo -e "$FROM_TIME,$TO_TIME";}>input1.csv
{ echo -e "from_time,to_time"; cat input1.csv;} > input.csv

първият ред съхранява стойностите, вторият ред отговаря за добавянето на име на колона

person Rudra Mishra    schedule 14.02.2020
comment
Трябва да редактирате отговора си, не е ясен и съдържа грешки (второто echo има несъответстваща двойна кавичка, например) - person tonjo; 14.02.2020