awk/sed를 사용하여 한 줄씩 파일을 조작하는 동안 오류가 발생했습니다.

awk/sed를 사용하여 한 줄씩 파일을 조작하는 동안 오류가 발생했습니다.

" 1"파일의 각 줄 끝에 문자열을 추가 해야 합니다 . 다음 두 명령을 실행하면 빈 파일이 생성됩니다.

awk '{ print $0 " 1" }' < file.txt > file.txt 

사용sed

sed 's/$/ 1/' file.txt > file.txt

여기서 시도할 때 어떤 오류가 발생합니까? 조언해 주실 수 있나요? Mac 터미널에서 이 명령을 실행하고 있습니다.

답변1

GNU sed솔루션에는 인라인 편집이 필요합니다 -i.

sed -i 's/$/ 1/' file.txt

(BSD의 경우 sed필요 sed -i '')

에서는 awk이 문제를 해결하려면 임시 파일을 사용해야 합니다.

awk '{ print $0 " 1" }' file.txt > tmp && mv tmp file.txt

실제로 sed임시 파일도 생성되지만 -i파일이 처리되는 경우도 있습니다.

문제는 다음과 같습니다 awk '{ print $0 " 1" }' < file.txt > file.txt.

리디렉션은 awk제어권을 얻기 전에 수행됩니다. > file.txt파일이 잘립니다. 터미널에서 이것을 시도해 보세요:

>file

file파일에 이전 내용이 있더라도 크기는 0이 됩니다. 따라서 awk이 파일에서는 데이터를 읽을 수 없습니다. 와 같은 문제입니다 sed.

\r개행 문자를 사용한 최종 솔루션:

perl -pi -e 's/\r\n|\n|\r/ 1\n/g' file.txt

관련 정보