chaîne de concaténation dans bash

J’ai du mal à concaténer cette chaîne ensemble. Mon but est d’avoir /folder/p/t/e

test.txt contient la chaîne “test”.

 cat test.txt|cd /folder/p/`awk '{print substr($,0,1)}'`/`awk '{print substr($0,1,1)}'` 

il est en train de sortir /folder/p/t/ donc je pense qu’il y a quelque chose qui ne va pas avec la deuxième partie du substrat.

Quelqu’un pourrait-il aider à éclairer comment je peux le faire?

Merci!

Votre première instance awk capture tout stdin, donc votre seconde ne lit rien. Tout ce qui lit stdin doit être une seule commande.

 cat test.txt | cd /folder/p/`awk '{print substr($0,0,1)"/"substr($0,2,1)}'` 
 FOO=$(< test.txt) cd /folder/p/${FOO:0:1}/${FOO:1:1} 

Vous supposez que votre deuxième appel à awk recevra quelque chose de test.txt , ce qui n’est pas le cas. Le texte de cat test.txt est redirigé vers la commande après le tube et la commande dans le sous-shell (le premier awk ) reçoit toutes les entrées, ne laissant aucune entrée pour le second awk , comme kojiro a déjà répondu.

Lorsque la fusion des deux commandes awk résoudra le problème, il n’est pas garanti que cela fonctionnera dans d’autres shells. Parce que beaucoup de gens confondent bash avec «shell» en général, je pense qu’il est intéressant de noter qu’une solution plus portable serait celle de Beta.