Hoe kan ik een regel met een onderstreping splitsen met awk?

Ik heb deze regel, maar ik wil dat elk deel ervan wordt gescheiden en ik wil dat deze scheiding wordt gedaan met awk.

De originele regel is de volgende:

3302491505_8139829707_13970101.csv 

en wat ik wil als uitvoer is:

8139829707 

of dit:

3302491505 

Reacties

  • Is dit wat je wilt: awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"?
  • nee, ik wil slechts één ervan afdrukken: 8139829707 of 3302491505
  • wat is het probleem bij het afdrukken van het eerste veld met _ als veldscheidingsteken? Doe wat moeite

Antwoord

Dit kan worden gedaan met cut:

$ cut -d_ -f2 <<< "3302491505_8139829707_13970101.csv" 8139829707 

Antwoord

Probeer dit:

awk -F"[_.]" "{print $2; print $1}" <<< "3302491505_8139829707_13970101.csv" 

-F stelt het veldscheidingsteken in op _ of .. Het laat toe om de velden $1 en $2 in te stellen.

Reacties

  • dit drukt de hele regel af

Antwoord

Dit drukt alle delen afzonderlijk af

$ awk -F"[_.]" "{print $1; print $2; print $3; print $4}" <<< "3302491505_8139829707_13970101.csv" 3302491505 8139829707 13970101 csv 

Gebruik gewoon het gewenste veld.

$ awk -F"[_.]" "{ print $3;}" <<< "3302491505_8139829707_13970101.csv" 13970101 

Antwoord

echo -n "3302491505_8139829707_13970101.csv" | awk -F"[._]" "{print $1}" 

Dit wordt gescheiden door _ of . en druk vervolgens het gewenste veld af. Gewoon afdrukken

  • $1 voor eerste veld: 3302491505
  • $2 voor 2e veld: 8139829707
  • $3 voor 3e veld: 13970101

Antwoord

Bourne-achtige shells hebben een ingebouwde manier om strings te splitsen. Dat is wat er gebeurt als je een parameteruitbreiding niet aanhaalt en de bron van zoveel bugs als je niet wilt dat dat gebeurt.

Het lijkt dus redelijk om het te gebruiken als het echt is nodig.

IFS=_ # split on _ set -o noglob # leaving a parameter expansion unquoted also # involves filename generation which we don"t want here var=3302491505_8139829707_13970101.csv set -- $var # $var unquoted means its split printf "%s: %s\n" First "$1" Second "$2" Third "$3" 

Sommige shells hebben minder omslachtige manieren om strings te splitsen.

In zsh:

var=3302491505_8139829707_13970101.csv non_empty_parts=(${(s:_:)var}) parts=("${(@s:_:)var}") 

Of rechtstreeks:

printf "%s\n" "Second part: ${${(s:_:)var}[2]}" 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *