Этот короткий скрипт awk работает для данного примера:
awk -F',' -v OFS=',' -v pat='^"[0-9]+"$' '{
for(i=NF;i>0;i--)if($i~ pat ){$NF=$i FS;$i="\x98";break}
sub("\x98,","")
}7' file
краткое объяснение:
Это интересная проблема.
- the
pat
переменная хранит шаблон регулярного выражения, который мы хотим переместить в конец - для каждой строки, мы делаем al oop от конца и проверяем шаблон, чтобы мы могли убедиться, что мы нашли последний соответствующий столбец.
- если мы нашли столбец, мы устанавливаем последнее поле с соответствующим столбцом с запятой. (Я заметил, у вас всегда есть пустое поле в конце каждой строки). И мы устанавливаем значение col с невидимым значением
\x98
, чтобы потом можно было легко его удалить. - наконец, мы удаляем
"\x98,"
с помощью sub()
тест
kent$ cat f
"something","31","null","null","null","null",
"something","something","something","142","null","null",
"something","something","24","null","null","null",
kent$ awk -F',' -v OFS=',' -v pat='^"[0-9]+"$' '{
for(i=NF;i>0;i--)if($i~ pat ){$NF=$i FS;$i="\x98";break}
sub("\x98,","")
}7' f
"something","null","null","null","null","31",
"something","something","something","null","null","142",
"something","something","null","null","null","24",