Comment diviser la chaîne par un délimiteur dans unix

J’ai la chaîne suivante et je veux la diviser en 3 parties:

Texte:

  "footballdb ID"@en 

La sortie devrait être

 $1 =  $2 =  $3 = "footballdb ID"@en 

fondamentalement une division d’un tuple de RDF en ses parties. Je veux le faire via un script UNIX, mais je ne connais ni sed ni awk. S’il vous plaît aider.

 read ABC <<< $string echo -e "\$1 = $A\n\$2 = $B\n\$3 = $C" 

Sortie:

 $1 =  $2 =  $3 = "footballdb ID"@en 

Si vos champs de saisie sont séparés par des tabulations, cela produira votre sortie souhaitée:

 $ awk -F'\t' '{ for (i=1;i<=NF;i++) printf "$%d = %s\n", i, $i }' file $1 =  $2 =  $3 = "footballdb ID"@en 

Sinon, cela pourrait être ce que vous voulez si vos champs ne sont pas séparés par des tabulations:

 $ cat tst.awk { gsub(/<[^>]+>/,"&\n") split($0,a,/[[:space:]]*\n[[:space:]]*/) for (i=1; i in a; i++) printf "$%d = %s\n", i, a[i] } $ $ awk -f tst.awk file $1 =  $2 =  $3 = "footballdb ID"@en 

Si ce n’est pas la façon dont vos champs de saisie sont séparés et / ou pas ce que vous voulez sortir, mettez à jour votre question pour clarifier.

Tout ce que vous utilisez pour diviser la chaîne doit reconnaître non seulement l’espace blanc, mais aussi la convention selon laquelle le guillemet double “protège” l’espace vide avant l’ID et l’empêche de fractionner les champs. Je crains que ce calcul ne soit au-delà de ce qui est possible avec sed. Vous pouvez le faire en awk, mais awk offre peu d’avantages spéciaux ici.

Vous affichez un format séparé par des espaces avec des guillemets. Un problème similaire consiste à parsingr le format séparé par des virgules avec des guillemets. Questions connexes:

  • Parse CSV avec guillemets doubles dans certains cas

  • Comment scinder csv dont les colonnes peuvent contenir,

echo “votre chaîne” | awk -F “” ‘{imprimer $ 1 $ 2 $ 3 $ 4}’

 awk '{ print "$1 = " $1 "\n$2 = " $2 "\n$3 = " $3 }' filename