중간 파일을 작성하지 않고 문자열을 여러 개 연결

중간 파일을 작성하지 않고 문자열을 여러 개 연결

일부 파일의 일부를 추출하여 다른 파일로 연결하고 싶지만 중간 파일을 작성하고 싶지 않습니다.

예를 들어:

$ cat textExample.txt 
Much I marvelled this ungainly fowl to hear discourse so plainly,
Though its answer little meaning- little relevancy bore;
For we cannot help agreeing that no living human being
Ever yet was blessed with seeing bird above his chamber door-
Bird or beast upon the sculptured bust above his chamber door,
With such name as "Nevermore."
$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 8, 9)}'
marvelled
$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 77, 6)}'
answer
$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 189, 7)}'
blessed

문장을 결합하려면 파일을 작성하면 됩니다.

$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 8, 9)}'| tr "\n" " " > intermediate.txt
$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 77, 6)}' | tr "\n" " " >> intermediate.txt
$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 189, 7)}' >> intermediate.txt
$ cat intermediate.txt 
marvelled answer blessed

또는 여러 awk 명령을 사용할 수 있습니다(단, 개행 문자를 제거할 수는 없습니다).

$ cat textExample.txt | tr -d "\n" | awk 'NR==1' | awk '{print substr($0, 8, 9)}; {print substr($0, 77, 6)}; {print substr($0, 189, 7)}' 
marvelled
answer
blessed

cat다음과 같은 것을 사용하여 중간 파일에 의존하지 않고 다른 단어를 함께 연결할 수 있는지 궁금합니다 .

$ cat {first word} | cat {second word} | cat {third word} 
first second third

감사해요

답변1

내가 당신을 올바르게 이해했다면 이것은 나에게 효과적이었습니다.

cat textExample.txt | tr -d "\n" | awk '{print substr($0, 8, 9) " " substr($0, 77, 6) " " substr($0, 189, 7)}'

답변2

나는 당신의 의도를 이해하지 못합니다.

하지만 시도해 보세요:

 ... | tr -d '\n' |
awk '{printf "%s %s %s\n", substr($0, 8, 9),substr($0, 77, 6),substr($0, 189, 7)}'

당신의 의견을 제공

tr -d '\n' < se | awk '{printf "%s %s %s\n", substr($0, 8, 9),substr($0, 77, 6),substr($0, 189, 7)}'
marvelled answer blessed
  • 보세요. 기본적으로 개행 문자 로 printf끝나지 않습니다.print

또한 서브 쉘을 사용할 수 있습니다

( cmd1 arg 1
 cmd2 arg for 2
 cmd 3 ) > result

그러면 cmds의 출력이 result.

답변3

배쉬와 함께

cat extract_words.sh

#!/bin/bash
concat=" "
min=$(($6+$7))
while read line
do
  concat="$concat$line"
  if test "${#concat}" -ge "$min" ; then
    break
  fi
done < "$1"
echo "${concat:$2:$3}" "${concat:$4:$5}" "${concat:$6:$7}"

넌 그냥 그렇게 부르잖아

./extract_words.sh "textExample.txt" 8 9 77 6 189 7

관련 정보