Unix 파일의 고유 열을 사용하여 여러 파일로 분할

Unix 파일의 고유 열을 사용하여 여러 파일로 분할

sample.csv다음 file()을 고유 열을 사용하여 여러 파일로 분할 해야 합니다 (처음 3개는 고유 열임).

샘플.csv

123|22|56789|ABCDEF|12AB34|2019-07-10|2019-07-10|443.3400|1|1
123|12|5679|BCDEFG|34CD56|2019-07-10|2019-07-10|896.7200|1|2
123|12|5679|CDEFGH|45DE67|2019-07-10|2019-07-10|680.9200|1|1
123|22|56789|DEFGHI|56EF78|2019-07-10|2019-07-10|405.8800|1|2

필요한 출력 파일은 다음과 같습니다.

Sample_123_22_56789.csv

123|22|56789|ABCDEF|12AB34|2019-07-10|2019-07-10|443.3400|1|1
123|22|56789|DEFGHI|56EF78|2019-07-10|2019-07-10|405.8800|1|2

Sample_123_12_5679.csv

123|12|5679|BCDEFG|34CD56|2019-07-10|2019-07-10|896.7200|1|2
123|12|5679|CDEFGH|45DE67|2019-07-10|2019-07-10|680.9200|1|1

아래 명령을 사용하고 있는데 작동하지만 하드코드하지 않고 일반으로 만들고 싶습니다.$4"|"$5"|"$6"|"$7"|"$8"|"$9"|"$10

awk -F\| '{print $4"|"$5"|"$6"|"$7"|"$8"|"$9"|"$10 > 
 sample_"$1"_"$2"_"$3".CSV"}' sample.csv

업데이트 #1

답장을 보내주셔서 감사하고 혼란을 드려 죄송합니다. 제가 원하는 출력은 다음과 같습니다(처음 3개 열 제외).

Sample_123_22_56789.csv

ABCDEF|12AB34|2019-07-10|2019-07-10|443.3400|1|1 DEFGHI|56EF78|2019-07-10|2019-07-10|405.8800|1|2 

Sample_123_12_5679.csv

BCDEFG|34CD56|2019-07-10|2019-07-10|896.7200|1|2 CDEFGH|45DE67|2019-07-10|2019-07-10|680.9200|1|1

답변1

"유니버설"이 열 수를 변경할 수 있음을 의미하고 항상 처음 3개 필드로 정의된 이름을 가진 파일에 모든 열을 쓰려는 경우 다음을 시도해 볼 수 있습니다.

awk -F\| '{
            data=$4
            for(i=5;i<=NF;i++){
                data = data"|"$(i)
            }
            print data > "sample_"$1"_"$2"_"$3".CSV"}' sample.csv

물론, 그것이 당신의 명령이 하는 일입니다. 귀하의 질문에 표시된 원하는 출력이 생성되지 않지만 이는 원하는 출력이 명령과 일치하지 않기 때문입니다. 포함하고 싶다면모두예제에 표시된 대로 출력의 필드는 대신 다음을 사용합니다.

awk -F\| '{
            data=$1
            for(i=2;i<=NF;i++){
                data = data"|"$(i)
            }
            print data > "sample_"$1"_"$2"_"$3".CSV"}' sample.csv

답변2

다음 명령을 사용해보십시오. 훌륭하게 작동합니다.

for i in `awk -F "|" '{if (!seen[$2]++)print $2}' file2.txt `; do awk -v i="$i" -F "|" '$2==i{print $0}' file2.txt >sample_123_"$i"_56789.csv; done

산출

praveen:~$ cat sample_123_22_56789.csv 
123|22|56789|ABCDEF|12AB34|2019-07-10|2019-07-10|443.3400|1|1
123|22|56789|DEFGHI|56EF78|2019-07-10|2019-07-10|405.8800|1|2


 cat sample_123_12_56789.csv 
123|12|5679|BCDEFG|34CD56|2019-07-10|2019-07-10|896.7200|1|2
123|12|5679|CDEFGH|45DE67|2019-07-10|2019-07-10|680.9200|1|1

관련 정보