Como copiar strings do meio das linhas (entre as strings) até o final das linhas

3

Eu tenho um arquivo de texto (1.txt) da seguinte forma:

word1
word2
word3

Eu uso sed para adicionar strings ao início e ao final de cada linha da seguinte forma:

sed 's/^/blahblah1  /g' 1.txt > 2.txt
sed 's/$/  blahblah2/g' 2.txt > 3.txt

resultando em:

blahblah1  word1  blahblah2
blahblah1  word2  blahblah2
blahblah1  word3  blahblah2

Isso funciona bem, mas quero fazer algo mais.

Eu quero copiar as strings no meio de cada linha (word1, word2, etc.) para o final de cada linha da seguinte forma:

blahblah1  word1  blahblah2 word1
blahblah1  word2  blahblah2 word2
blahblah1  word3  blahblah2 word3

POR FAVOR, NOTE que blahblah1 e blahblah2 estão apenas representando comandos bash e outro texto de string E são os mesmos no início e no final de cada linha como os comandos sed ilustram - as strings entre eles são DIFERENTES - e as strings não são realmente " blahblah1 "e" blahblah2 ".

Alguma sugestão?

Basicamente, eu estou pegando um arquivo de texto contendo uma lista de strings e quero criar um script bash contendo uma lista de comandos para pegar linhas de código contendo uma string e lançá-las em arquivos com um nome contendo a string - daí a estrutura de cada linha.

    
por speld_rwong 05.01.2017 / 19:35

2 respostas

0

EDIT: Só percebi isso provavelmente não resolve o seu problema, uma vez que o seguinte assume que a "palavra do meio" é a segunda palavra.

Experimente este script. A entrada é lida do arquivo input.txt

while read ln; do
    middle_word='awk '{print $2}' <<< "$ln"'
    new="$ln $middle_word"
    echo "$new"
done < input.txt

Com a entrada que você deu, isso me dá a seguinte saída:

blahblah1  word1  blahblah2 word1
blahblah1  word2  blahblah2 word2
blahblah1  word3  blahblah2 word3

Advertência: o espaço em branco principal em cada linha é perdido por algum motivo.

    
por 05.01.2017 / 19:47
0

Muito simples de conseguir com o AWK:

$ awk '{print "blah1",$0,"blah2",$0}'    1.txt                                                                           
blah1     word1 blah2     word1
blah1     word2 blah2     word2
blah1     word3 blah2     word3

Ou com python:

$ python -c "import sys; print '\n'.join([ ' blah1 ' + l.strip() + ' blah2 ' + l.strip() for l in sys.stdin])" <  1.txt  
 blah1 word1 blah2 word1
 blah1 word2 blah2 word2
 blah1 word3 blah2 word3

Em ambos os casos, a ideia é a mesma - lemos o arquivo (ou, no caso do python, stdin) linha por linha, e imprimimos novas strings compostas do que lemos.

    
por 06.01.2017 / 04:08