나는 아주 간단한 일을 하는 데 어려움을 겪고 있습니다. 한 줄의 숫자로 구성된 약 2000개의 .txt 파일이 있습니다. 나는 접기 명령을 사용하여 한 줄을 여러 행이 있는 하나의 열로 접고 이 새로운 접힌 버전으로 원본 파일을 덮어쓰고 싶습니다. 내 시도:
#!/bin/bash
for i in *.txt ; do
fold -w 1 $file > $file
done
작동하지 않습니다. 돕다? 감사해요.
답변1
여기에는 두 가지 문제가 있습니다. 먼저 변수 "i"를 선언했지만 존재하지 않는 "$file"을 사용하고 있습니다. 그랬다고 하더라도 두 번째 문제는 bash가 "왼쪽에서 오른쪽으로" 읽는다는 것입니다. 이는 먼저 ">$file"을 보고 파일 내용을 덮어쓴다는 의미입니다. 따라서 올바른 변수를 사용했다면 데이터가 손실되었을 것입니다.
그래서 한 가지 오류로 인해 다른 오류가 발생하지 않게 되었습니다. 운이 좋은 친구입니다 :)
다음과 같이 시도해 보세요:
for i in *.txt ; do fold -w 1 $i > sillytmpfile; mv sillytmpfile $i; done
답변2
sed
옵션일 수도 있으며 임시 파일 문제를 내부적으로 처리합니다.
for i in *.txt ; do
sed -i 's#.#&\n#g' $file
done