В вашем коде вы используете ,
в качестве разделителя, но ваши поля фактически разделены ","
, поэтому просто измените настройки FS и OFS, чтобы они соответствовали вашим данным:
$ awk 'BEGIN{FS=OFS="\",\""} {sub($3,"",$4)} 1' file
"Acura","CL","2.2"," 2dr Coupe","FWD","Automatic","Gasoline"
"Acura","CL","2.2 Premium"," 2dr Coupe","FWD","Manual","Gasoline"
и чтобы избавиться от пробела, оставшегося в начале $ 4, включите пробелы в регулярное выражение:
$ awk 'BEGIN{FS=OFS="\",\""} {sub($3" *","",$4)} 1' file
"Acura","CL","2.2","2dr Coupe","FWD","Automatic","Gasoline"
"Acura","CL","2.2 Premium","2dr Coupe","FWD","Manual","Gasoline"
Это не надежно, хотя из-за использования $ 3 в качестве регулярного выражения, поэтому метасхемы RE, такие как .
, будут обрабатываться следующим образом:
$ echo '"Acura","CL","2.2","Big 12324 Coupe","FWD","Automatic","Gasoline"' |
awk 'BEGIN{FS=OFS="\",\""} {sub($3,"",$4)} 1'
"Acura","CL","2.2","Big 14 Coupe","FWD","Automatic","Gasoline"
Для того, чтобы это работало надежно, вы должны выполнять строковые, а не регулярные выражения:
$ awk 'BEGIN{FS=OFS="\",\""} s=index($4,$3){$4=substr($4,1,s-1) substr($4,s+length($3)); gsub(/ +/," ",$4); gsub(/^ | $/,"",$4)} 1' file
"Acura","CL","2.2","2dr Coupe","FWD","Automatic","Gasoline"
"Acura","CL","2.2 Premium","2dr Coupe","FWD","Manual","Gasoline"
и если вы хотите удалить только $ 3, если это происходит в начале $ 4, просто измените s=index($4,$3)
на (s=index($4,$3))==1
.