다음 형식의 텍스트 파일이 있습니다.
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를 삭제하시기 바랍니다.