Заменять пробелы символами подчеркивания только в кавычках

try

awk 'FNR == NR { print ; next ; } 
     NR > FNR && FNR > 1 { 
          split($0,A) ; 
          printf ",%s,,,,%s,,,\n",A[1],A[2] ;  }' f1 f2 

(можно в одну строку, я разбиваю, чтобы было удобнее читать)

where

  • FNR == NR { print ; next ; } копируем строки из первого файла
  • NR > FNR && FNR > 1 выбираем строку из второго файла без заголовка
  • split($0,A) ; поместить два var в массив (A)
  • printf ",%s,,,,%s,,,\n",A[1],A[2] ; и print

edit

проверено с f1

a1,a2,a3,a4,a5,a6,a7,a8,a9
q,w,,,,y,u,,
a,z,,,,q,n,,
.........................
z,p,,,,w,e,,

и f2

b1  b2
f   t
a   p
m   n
m   y
t   o

run :

awk 'FNR == NR { print ; next ; } NR > FNR && FNR> 1 { split($0,A) ; printf ",%s,,,,%s,,,\n",A[1],A[2] ;  }' f1 f2

result:

a1,a2,a3,a4,a5,a6,a7,a8,a9
q,w,,,,y,u,,
a,z,,,,q,n,,
.........................
z,p,,,,w,e,,
,f,,,,t,,,
,a,,,,p,,,
,m,,,,n,,,
,m,,,,y,,,
,t,,,,o,,,
1
23.05.2018, 17:05
5 ответов

En general, se recomendaría un analizador CSV adecuado. En este caso simple, awk hará :usar comillas dobles como el carácter separador de campo, y:

awk -F '"' -v OFS='"' '{
    for (i=2; i<=NF; i+=2)
        gsub(/[[:blank:]]/, "_", $i)
    print
}' <<END
first "UDP netprobe" hello
second "ACL allow" friendly "oops, another quoted field"
third "ACL deny" world
END
first "UDP_netprobe" hello
second "ACL_allow" friendly "oops,_another_quoted_field"
third "ACL_deny" world

Para los ventiladores de línea -:

awk -F\" '{for(i=2;i<=NF;i+=2)gsub(/[[:blank:]]/,"_",$i)}1' OFS=\" file
1
27.01.2020, 23:11

Usandosed:

sed 's/\("[^"]\+\) \([^"]\+"\)/\1_\2/g' file

La ​​expresión regular busca la palabra dentro del doble, y el comando reemplaza el espacio con un guión bajo.

1
27.01.2020, 23:11
sed 's/\(\"[^" ]*\) \([^"]*\"\)/\1_\2/g' file

Advertencia :solo funciona con un espacio simple entre un par de comillas dobles.

1
27.01.2020, 23:11

Conperl:

perl -pe 's{".*?"}{$& =~ y/ /_/r}ge' file
4
27.01.2020, 23:11

Con sed

sed -E ':A;s/("[^ "]+) ([^"]*")/\1_\2/;tA' infile
3
27.01.2020, 23:11

Теги

Похожие вопросы