Мой PSV-файл выглядит так
Column1|Column2|Column3
Web_Value_in_file|123|OLA
Tab_Value_out_file|453|OLA
Исходные и целевые столбцы отличаются. Я хочу обрезать значение из столбца1 до нескольких столбцов в цели с помощью разделителя _. Я хочу, чтобы выходной файл был как в Excel (.xlsx)
Column1 Column2 Column3
Web In 123
Tab Out 453
решение1
Я думаю, это то, что вы ищете:
column -s '|' -t file
Предполагая, что ни в одном из полей нет встроенных символов вертикальной черты. Для анализа общих данных CSV используйтеcsvkit.
решение2
С достаточно последней версиейМиллер
$ ~/src/miller/c/mlr --csvlite --ifs '|' --ofs tab put '
x = splitnv($Column1,"_"); $Column3 = $Column2; $Column2 = capitalize(x[3]); $Column1 = x[1]
' then cat file.psv
Column1 Column2 Column3
Web In 123
Tab Out 453
В более старых версиях Miller вы, возможно, не сможете использовать эту capitalize
функцию — вы можете либо смириться с использованием строчных букв in
/ out
, либо преобразовать все в заглавные IN
/, OUT
заменив capitalize
на toupper
.