Как объединить вывод столбца в конец строки в предыдущем столбце? - PullRequest
1 голос
/ 13 июня 2019

У меня есть файл .csv, содержащий три столбца, и мне нужно объединить значение столбца 2 с концом строки столбца 1.

Файл .csv содержит тысячи строк, и для этого нужнобыть сделано для каждого ряда.

Я пытался использовать awk, но мне трудно получить правильный код

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

awk '{if ($2!= " ") {print $1+$2 }}'

These of course don't work

Пример ввода:

Команда, используемая для получения фактического выводаэто просто: cat test.csv

[2,4,5,6,2,34,61,32,34,54,34,       22]     0.144354
[3,4,6,4,5,6,7,1,2,3,4,53,23,       34]     0.332453
[2,43,6,2,1,2,5,8,9,0,8,6,34,       21]     0.347643

Желаемый вывод:

             col1                       col2
[2,4,5,6,2,34,61,32,34,54,34,22]     0.144354
[3,4,6,4,5,6,7,1,2,3,4,53,23,34]     0.332453
[2,43,6,2,1,2,5,8,9,0,8,6,34,21]     0.347643

Ответы [ 3 ]

2 голосов
/ 13 июня 2019

Заменить "запятая, за которой следует один или несколько пробелов", на "запятую":

sed 's/, \{1,\}/,/' file.csv
sed 's/, */,/g' file.csv

Печать столбцов $ 1 и $ 2 как $ 1 (возможно, отдельно с вкладкой):

awk '{print $1 $2, $3}' OFS='\t' file.csv
0 голосов
/ 13 июня 2019

Я вижу пробелы после запятой, когда вы их не хотите.

$: sed -E 's/,\s+/,/' file.csv
[2,4,5,6,2,34,61,32,34,54,34,22]     0.144354
[3,4,6,4,5,6,7,1,2,3,4,53,23,34]     0.332453
[2,43,6,2,1,2,5,8,9,0,8,6,34,21]     0.347643

Добавьте -i ( после -E), чтобы сделать его редактированием на месте.

$: sed -Ei 's/,\s+/,/' file.csv
$: cat file.csv
[2,4,5,6,2,34,61,32,34,54,34,22]     0.144354
[3,4,6,4,5,6,7,1,2,3,4,53,23,34]     0.332453
[2,43,6,2,1,2,5,8,9,0,8,6,34,21]     0.347643
0 голосов
/ 13 июня 2019

Вы можете попробовать:

awk '{printf("%s%s\t%s\n",$1,$2,$3)}' file.cvs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...