Hvordan kan jeg dele en linje, der indeholder en understregning med awk?

Jeg har denne linje, men jeg vil have hver del af den adskilt, og jeg ønsker, at denne adskillelse skal ske med awk.

oprindelige linje er følgende:

3302491505_8139829707_13970101.csv 

og hvad jeg vil have som output er:

8139829707 

eller dette:

3302491505 

Kommentarer

  • Er det hvad du vil have: awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"?
  • nej Jeg vil kun udskrive en af dem: 8139829707 eller 3302491505
  • hvad er problemet med at udskrive det første felt ved hjælp af _ som feltseparator? Lav en indsats

Svar

Dette kan gøres med cut:

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

Svar

Prøv dette:

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

-F indstiller feltadskilleren til _ eller .. Det giver mulighed for at indstille felterne $1 og $2.

Kommentarer

  • dette udskriver hele linjen

Svar

Dette udskriver alle dele individuelt

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

Brug bare det ønskede felt.

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

Svar

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

Dette adskiller sig ved _ eller . og udskriv derefter hvilket felt du har brug for Udskriv bare

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

Svar

Bourne-lignende skaller har en indbygget måde at dele strenge på. Det er, hvad der sker, når du lader en parameterudvidelse være citeret, og kilden til så mange fejl, når du ikke ønsker, at det skal ske.

Så det virker kun rimeligt at bruge det, når det faktisk er nødvendigt.

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" 

Nogle skaller har mindre besværlige måder at dele strenge 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]}" 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *