.txt 파일을 수정하는 스크립트가 있습니다.
이건 내 스크립트야
awk 'BEGIN{FS=OFS="\t"}{split($1,a,"_"); split(a[3],b,"/"); print a[1],a[2],b[1],b[2],$0}' file.txt | awk 'BEGIN{FS=OFS="\t"}{split($18,a,";"); split(a[2],b,"="); print b[2],$0}' > out_file.txt
내 폴더에 파일이 잔뜩 있어요
내 파일에서 이 스크립트를 실행하고 원본 파일 이름으로 각 출력을 반환하고 싶습니다.
나는 이것을 시도했다
> for i in `find . -maxdepth 1 -type f -iname "*.txt" awk 'BEGIN{FS=OFS="\t"}{split($1,a,"_"); split(a[3],b,"/"); print a[1],a[2],b[1],b[2],$0}'| awk 'BEGIN{FS=OFS="\t"}{split($18,a,";"); split(a[2],b,"="); print b[2],$0}'print > out}' *.txt
-bash: syntax error near unexpected token `|'
(base) user112$
하지만 아무 일도 일어나지 않았어
답변1
for i in *.txt; do
awk 'BEGIN{FS=OFS="\t"}{split($1,a,"_"); split(a[3],b,"/"); print a[1],a[2],b[1],b[2],$0}' $i | awk 'BEGIN{FS=OFS="\t"}{split($18,a,";"); split(a[2],b,"="); print b[2],$0}' > $i'_1'.txt
done
답변2
이게 당신이 하고 싶은 일인가요?
awk '
BEGIN { FS=OFS="\t" }
FNR == 1 {
close(out)
out = FILENAME "_1.txt"
}
{
split($1,a,/_/)
split(a[3],b,"/")
$0 = a[1] OFS a[2] OFS b[1] OFS b[2] OFS $0
split($18,a,/;/)
split(a[2],b,/=/)
print b[2], $0 > out
}
' *.txt
다른 이름으로 게시된 이전 질문에서 보여드린 것처럼 쉘 루핑이나 여러 명령에 대한 파이핑이 필요하지 않습니다.https://unix.stackexchange.com/a/605896/133219. 다시 말하지만, 수행하려는 작업을 수행하는 더 좋은 방법이 있을 수 있지만 샘플 입력/출력이 없으면 스크립트를 복사하는 것뿐입니다.