![Perl 또는 ubuntu 명령을 사용하여 텍스트 파일의 특정 단어를 바꾸고 결과를 여러 텍스트 파일에 저장하고 싶습니까?](https://linux55.com/image/193560/Perl%20%EB%98%90%EB%8A%94%20ubuntu%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%8A%B9%EC%A0%95%20%EB%8B%A8%EC%96%B4%EB%A5%BC%20%EB%B0%94%EA%BE%B8%EA%B3%A0%20%EA%B2%B0%EA%B3%BC%EB%A5%BC%20%EC%97%AC%EB%9F%AC%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%A0%80%EC%9E%A5%ED%95%98%EA%B3%A0%20%EC%8B%B6%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
다음 내용이 포함된 results.txt 파일이 있습니다.
the word: word1 is a not detected
다음 단어 목록이 포함된 txt 파일이 있습니다.
word1 word2 word3 ...
동일한 단어 이름으로 txt 파일을 생성하고 "word1"을 다음과 같이 다른 txt 파일의 단어로 한 줄씩 바꾸고 싶습니다.
file1: resultword1.txt에는 다음이 포함됩니다.
the word: word1 is a not detected
파일2: resultword2.txt에는 다음이 포함됩니다.
the word: word2 is a not detected
파일3: resultword3.txt에는 다음이 포함됩니다.
the word: word3 is a not detected
....등
답변1
단어 목록에 공백으로 구분된 단어가 포함되어 있다고 가정합니다.
awk '{ for (i = 1; i <= NF; ++i ) printf "the word: %s is a not detected\n", $i >("result" $i ".txt") }' words
이 awk
명령은 파일에서 공백으로 구분된 모든 단어를 반복합니다 words
. 각 단어( $i
)에 대해 해당 단어가 올바른 위치에 삽입된 문장을 인쇄합니다. 출력은 단어 result
앞뒤 에 .txt
문자열이 추가되어 이름이 지정된 파일로 전송됩니다 .
이름 충돌 테스트는 수행되지 않았습니다.
GNU를 사용하지 않는 시스템에서는 awk
다음을 수행할 수 있습니다.
awk '{ for (i = 1; i <= NF; ++i ) {
fname = "result" $i ".txt"
printf "the word: %s is a not detected\n", $i >fname
close(fname)
}' words
...잠시 후에 파일 설명자가 부족해지지 않도록 합니다(GNU가 이 문제를 내부적으로 적절하게 처리한다고 믿습니다 awk
). 하지만 이는 파일이잘린다음에 추가하는 대신 동일한 단어를 처리합니다. 두 코드 모두에서 출력 파일은 첫 번째 출력에서 잘립니다.