2013-09-19 3 views
0

чтение файла csv в unix и выполнение некоторой подстановки на некоторых столбцах. как 2-й столбец (тип строки), следует заменить значением (2-й столбец + значение 1-го столбца (целое число)), затем 5-й столбец на 5 $ + 4 и т. д. Ниже приведен пример ввода-вывода. и первая строка, которая является описанием, должна быть оставлена ​​как есть.awk или sed, в зависимости от того, что больше подходит

образец входного

EmpID|Empname|Empadd|roleId|roleDesc|Dept 
100|mst|Del|20|SD|DA 
101|ms|Del|21|XS|DA 

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

EmpID|Empname|Empadd|roleId|roleDesc|Dept 
100|mst100|Del|20|SD20|DA 
101|ms101|Del|21|XS21|DA 

EmpName были сцеплены с EmpId & роль по убыванию с Идентификатор роли.

+0

'awk' довольно хорошо для этой задачи. Покажите скрипт 'awk', который вы пробовали ... –

+0

' Надеюсь, что это полезно:) 'для задания? – devnull

+0

awk 'NR> 1, FS = OFS = "|" { \t $ 2 = $ 2 $ 1; $ 5 = $ 5 $ 4; print} 'file.csv> file.csv Должен отметить, что я новичок в unix, и это первый раз, когда я пытаюсь сражаться с awk. – mst

ответ

1

Вы получили это почти правильно, это работает:

$ awk 'BEGIN{FS=OFS="|"} (NR>1) {$2=$2 "" $1; $5=$5 "" $4} {print}' <<EOF           
EmpID|Empname|Empadd|roleId|roleDesc|Dept 
100|mst|Del|20|SD|DA 
101|ms|Del|21|XS|DA 
EOF 
=> 
    EmpID|Empname|Empadd|roleId|roleDesc|Dept 
    100|mst100|Del|20|SD20|DA 
    101|ms101|Del|21|XS21|DA 
+0

будет то же самое отлично работать и с .dat-файлом? – mst

+0

Если в файле .dat вы имеете в виду двоичный формат какого-то типа, нет. Причина - awk строго ориентирована по строкам и столбцам, т. Е. Вы должны иметь '\ n', поэтому awk может сфокусироваться на строке за раз, затем эта строка делится на столбцы с помощью' FS' (разделитель полей) – hroptatyr

+0

no двоичный формат, шаблон данных точно подобен вышеупомянутому формату csv-файла – mst

0
> awk -F"|" -v OFS="|" 'NR!=1{$2=$1$2&&$5=$5$4}1' temp 
EmpID|Empname|Empadd|roleId|roleDesc|Dept 
100|1|Del|20|SD20|DA 
101|1|Del|21|XS21|DA 
> 
Смежные вопросы