Использование AWK, чтобы добавить новый столбец со значениями в файл CSV, не создавая пустых новых строк между строками

Grep для символов ASCII (подмножество UTF-8) в Linux / GNU:

dd if=/dev/random bs=1 count=1G | egrep -ao "\w" | tr -d '\n'
1
17.09.2018, 22:59
3 ответа

Единственный способ воспроизвести вашу проблему — это если файл действительно содержит точки с запятой в качестве разделителей и каждая строка заканчивается парой \r\n. Когда это происходит, использование \rв качестве RS приводит к тому, что \nоказывается на следующей строке.

Исходный файл используется:

Id,Day,UserId,ItemId
1,12/1/17 0:03,2323,tv
2,12/14/17 7:10,4546,frr
3,1/22/18 14:11,2421,fdf
4,2/16/18 13:36,4545,dfdf
5,3/5/18 10:47,1232,dfsdf

Самое простое решение — удалить \rв файле (, возможно, с помощью dos2unix ).
Проще сделать это внутри awk:

$ awk '{gsub(/\r/,"")}; NR==1 {print $0,"MonthYear"}; NR>1 {print $0,$2"/"$4}' FS="[,/ ]" OFS=, Test.csv
Id,Day,UserId,ItemId,MonthYear
1,12/1/17 0:03,2323,tv,12/17
2,12/14/17 7:10,4546,frr,12/17
3,1/22/18 14:11,2421,fdf,1/18
4,2/16/18 13:36,4545,dfdf,2/18
5,3/5/18 10:47,1232,dfsdf,3/18
0
28.01.2020, 00:29

Мне удалось решить эту проблему, удалив пустые записи из выходного файла с помощьюsed '/^ *$/d' Test1.csv > Test2.csv

0
28.01.2020, 00:29

Другой awkподход

$ awk '{print $0,NR==1?" MonthYear":substr($2,0,index($2,"/"))substr($2,length($2)-1)}' Test.csv
Id  Day UserId  ItemId  MonthYear
1   12/1/17 0:03    2323    tv 12/17
2   12/14/17 7:10   4546    frr 12/17
3   1/22/18 14:11   2421    fdf 1/18
4   2/16/18 13:36   4545    dfdf 2/18
5   3/5/18 10:47    1232    dfsdf 3/18
$
0
28.01.2020, 00:29

Теги

Похожие вопросы