Hvordan kan jeg dele en linje som inneholder en understreking med awk?

Jeg har denne linjen, men jeg vil at hver del av den skal skilles, og jeg vil at denne separasjonen skal gjøres med awk.

originallinjen er følgende:

3302491505_8139829707_13970101.csv 

og det jeg vil ha som utdata er:

8139829707 

eller dette:

3302491505 

Kommentarer

  • Er dette det du vil ha: awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"?
  • nei Jeg vil bare skrive ut en av dem: 8139829707 eller 3302491505
  • hva er problemet med å skrive ut det første feltet med _ som feltseparator? Gjør litt innsats

Svar

Dette kan gjøres med kutt:

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

Svar

Prøv dette:

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

-F setter feltskilleren til _ eller .. Det gjør det mulig å angi feltene $1 og $2.

Kommentarer

  • dette skriver ut hele linjen

Svar

Dette skriver ut alle delene individuelt

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

Bare bruk feltet du vil ha.

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

Svar

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

Dette skiller seg fra _ eller . og skriv ut hvilket felt du trenger Bare skriv ut

  • $1 for første felt: 3302491505
  • $2 for 2. felt: 8139829707
  • $3 for 3. felt: 13970101

Svar

Bourne-lignende skjell har en innebygd måte å dele strenger på. Det er det som skjer når du lar en parameterutvidelse være sitert, og kilden til så mange feil når du ikke vil at det skal skje.

Så det virker bare rettferdig å bruke det når det faktisk er nødvendig.

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" 

Noen skjell har mindre tungvint måter å dele strenger på.

I zsh:

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

Eller direkte:

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *