Hur kan jag dela en rad som innehåller en understrykning med awk?

Jag har den här raden, men jag vill att varje del av den ska separeras och jag vill att den här separationen ska göras med awk.

originalrad är följande:

3302491505_8139829707_13970101.csv 

och vad jag vill ha som utdata är:

8139829707 

eller detta:

3302491505 

Kommentarer

  • Är det här du vill ha: awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"?
  • nej Jag vill bara skriva ut en av dem: 8139829707 eller 3302491505
  • vad är problemet med att skriva ut det första fältet med _ som fältseparator? Gör en ansträngning

Svar

Detta kan göras med klipp:

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

Svar

Prova detta:

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

-F sätter fältseparatorn till _ eller .. Det gör det möjligt att ställa in fälten $1 och $2.

Kommentarer

  • detta skriver ut hela raden

Svar

Detta skriver ut alla delar individuellt

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

Använd bara det fält du vill ha.

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

Svar

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

Detta skiljer sig från _ eller . och skriv ut vilket fält du behöver. Skriv bara ut

  • $1 för första fältet: 3302491505
  • $2 för andra fältet: 8139829707
  • $3 för tredje fältet: 13970101

Svar

Bourne-liknande skal har ett inbyggt sätt att dela strängar. Det är vad som händer när du lämnar en parameterutvidgning ociterad och källan till så många fel när du inte vill att det ska hända.

Så det verkar bara rättvist att använda det när det faktiskt är behövs.

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" 

Vissa skal har mindre besvärliga sätt att dela strängar.

I zsh:

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

Eller direkt:

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *