다음 형식의 텍스트 파일이 있습니다.
001|fileA
002|fileA
003|fileA
004|fileB
005|fileB
006|fileC
.
.
.
xxx|fileX
이 파일을 각 "|"에 해당하는 파일로 분할해야 합니다. fileA, fileB, fileC...fileX와 같은 새 파일의 이름입니다.
답변1
노력하다
awk -F\| '{ print $1 > $2 ; }' file
어디
-F\|
구분 기호 로 사용하려면|
|를 이스케이프해야 함을 awk에 알립니다.> $2
인쇄를 리디렉션할 값입니다$2
.
파일이 많은 경우(>10):
for x in $(awk -F\| '!a[$2]++ { print $2}' file)
do
awk -F\| -v f="$x" '$2 == f { print $1}' file > "$x"
done
- 첫 번째 awk는 uniq 파일 이름만 나열합니다.
- 52개 파일이면 괜찮지만 수백 개 파일이면 속도가 느려질 수 있습니다.
필드를 "안전하게" 셸에 넣을 수 있는 또 다른 옵션
awk -F\| '{printf "echo %s >> %s\n",$1,$2;}' file | bash
- 재실행을 방지하려면 먼저 fileX를 삭제해야 합니다.