find에서 결과를 얻은 다음 awk를 실행하여 처음 두 열을 인쇄하려고 합니다. 그런 다음 기존 파일 이름을 사용하고 이름에 추가 접미사를 추가하여 이러한 결과를 각 파일의 새 파일 이름으로 리디렉션하려고 합니다. 디렉터리의 파일, 원본 소스는 file.txt로 유지되고 새 파일의 이름은 file-new.txt입니다.
예를 들어:
find -type f -iname "*.txt" -exec awk '{print $1, $2}' {} \;
이렇게 하려면 무엇을 추가해야 합니까? sed를 사용하는 것이 더 나은 선택일까요?
답변1
가장 간단한 방법은 awk의 출력 리디렉션을 사용하는 것입니다. awk 출력 리디렉션은 간단한 경우에 사용하기가 매우 쉽습니다. 리디렉션이 처음 사용될 때 파일을 열고 이후에 기존 파일 설명자를 사용하여 동일한 파일 이름으로 리디렉션합니다.
파일 이름에 접미사를 추가하려면 쉽습니다.
find -type f -iname "*.txt" -exec awk '{print $1, $2 >(FILENAME "-new")}' {} +
그러나 파일 이름에 대해 더 복잡한 변환을 수행할 수 있습니다(여기에서는 각 입력 파일의 첫 번째 줄에서만 다시 계산됩니다).
find -type f -iname "*.txt" -exec awk '
FNR==1 {out=FILENAME; sub(/\.[^.]*$/, "-new&", out) || out = out "-new"}
{print $1, $2 >out}
' {} +