줄 중간(문자열 사이)에서 줄 끝까지 문자열을 복사하는 방법

줄 중간(문자열 사이)에서 줄 끝까지 문자열을 복사하는 방법

다음과 같은 텍스트 파일(1.txt)이 있습니다.

word1
word2
word3

나는 sed를 사용하여 다음과 같이 각 줄의 시작과 끝에 문자열을 추가합니다.

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

다음으로 이어진다:

blahblah1  word1  blahblah2
blahblah1  word2  blahblah2
blahblah1  word3  blahblah2

이것은 훌륭하게 작동하지만 더 많은 작업을 수행하고 싶습니다.

다음과 같이 각 줄의 중간(word1, word2 등)에 있는 문자열을 각 줄의 끝에 복사하고 싶습니다.

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

blahblah1 및 blahblah2는 bash 명령 및 기타 문자열 리터럴만 나타내며, sed 명령에서 표시된 것처럼 각 줄의 시작과 끝은 동일합니다. 둘 사이의 문자열은 다릅니다. 이러한 문자열은 실제로 "blahblah1 "이 아니며 " 발라 발라 2."

어떤 제안이 있으십니까?

기본적으로 문자열 목록이 포함된 텍스트 파일을 가져와서 문자열이 포함된 코드 줄을 잡고 해당 문자열이 포함된 파일 이름을 가진 파일에 덤프하는 명령 목록이 포함된 bash 스크립트를 만들고 싶습니다. 열.

답변1

편집: 다음은 "중간 단어"가 두 번째 단어라고 가정하기 때문에 이것이 문제를 해결하지 못할 수도 있다는 것을 깨달았습니다.

이 스크립트를 사용해 보세요. 파일에서 입력을 읽습니다.input.txt

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

제공한 입력을 기반으로 다음과 같은 출력이 제공됩니다.

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

경고: 어떤 이유로 각 줄의 선행 공백이 손실됩니다.

답변2

AWK를 사용한 구현은 매우 간단합니다.

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

또는 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

두 경우 모두 아이디어는 동일합니다. 파일(또는 Python의 경우 stdin)을 한 줄씩 읽고 읽은 내용으로 구성된 새 문자열을 인쇄합니다.

관련 정보