동일한 디렉토리에 text1.txt, text2.txt,..., text100.txt라는 100개의 텍스트가 있다고 가정합니다. 각 텍스트에서 특정 줄(처음 100줄)을 추출하고 이 줄을 또 다른 새로운 100줄의 텍스트에 별도로 저장하고 싶습니다.각각의 새 텍스트에는 100줄이 있습니다..
알아요 head -100 text1.txt > text1_new.txt
... head -100 text2.txt > text2_new.txt
할 수 있어요. 하지만 터미널에서 둘 다 추출하는 더 효율적인 방법이 있습니까?
감사해요! !
답변1
한 가지 방법은
find . -name "text*.txt" -type f -print0 | xargs -0 -I{} sh -c 'f="{}"; head -100 "$f" > "${f%.txt}_new.txt"'
find . -name "text*.txt" -type f
디렉토리에서 모든 텍스트 파일 찾기-print0
공백을 보존하기 위해 널 문자로 파일 경로를 인쇄합니다.xargs -0
Null로 끝나는 매개변수를 허용합니다.-I{}
매개변수로 사용할 자리표시자sh -c
명령 문자열을 사용하여 대시 실행f="{}"
매개변수를 변수에 저장f
head -100 "$f"
헤더 명령"${f%.txt}_new.txt"
매개변수의 ".txt"를 "_new.txt"로 바꿉니다.
답변2
파일을 반복할 수 있습니다.
for f in *.txt
do
head -n100 "$f" > "${f%.txt}_new.txt"
done
일치하는 모든 파일을 나열하기 위해 도착 시 *.txt
확장됩니다. 이 스크립트를 (부분적으로 또는 완전히) 실행한 경우 일부 결과 파일도 일치합니다. 해결책은 실행하기 전에 제거 rm *_new.txt
하거나 ( ) 패턴을 조이는 것입니다.