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
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]}"
awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"
?_
als veldscheidingsteken? Doe wat moeite