Você também pode usar o argumento -F para dividir a linha no sublinhado e, assim, acabar com algo parecido com isto:
ls | awk -F_ '{print "unzip " $0 " -d " $1; }
Eu tenho alguns arquivos zip no diretório quando preciso descompactar cada um em um diretório específico Eu usei
ls | awk '{ print "unzip " $1 " -d " $1} '
unzip p21286665_121020_Linux-x86-64.zip -d p21286665_121020_Linux-x86-64.zip
unzip p21841318_121020_Linux-x86-64.zip -d p21841318_121020_Linux-x86-64.zip
unzip p22098146_121020_Linux-x86-64.zip -d p22098146_121020_Linux-x86-64.zip
Mas eu preciso de algo assim.
unzip p21286665_121020_Linux-x86-64.zip -d p21286665
unzip p21841318_121020_Linux-x86-64.zip -d p21841318
unzip p22098146_121020_Linux-x86-64.zip -d p22098146
tente
ls | awk '{ print "unzip " $1 " -d " substr($1,1,index($1,"_")-1) } '
ou em sed
ls | sed -e "s/\([^_]*\)_.*$/unzip & -d /"
onde
[^_]*
é uma string não _ \(
.. \)
catpure como
&
é todo padrão