다중 열 형식이 2열 형식으로 변경되었습니다.

다중 열 형식이 2열 형식으로 변경되었습니다.

다음과 같은 파일이 있습니다.

1 a,b,c
2 z
3 d,f

다음 형식을 원합니다.

1 a
1 b
1 c
2 z
3 d
3 f

답변1

이상한 해결책 :

$ cat file
1 a,b,c
2 z
3 d,f

$ awk '{ gsub(",", "\n"$1" "); print; }' file
1 a
1 b
1 c
2 z
3 d
3 f

답변2

입력이 보이는 것처럼 간단하다면 bash쉘 스크립트가 잘 할 수 없는 작업을 수행하는 쉘 스크립트는 다음과 같습니다.

#!/usr/bin/env bash
declare -a col2
while read col1 rest
do
  IFS=, read -a col2 <<< "$rest"
  for value in ${col2[*]}
  do
    printf "%s %s\n" "$col1" "$value"
  done
done < input

이를 수행하는 더 좋은 방법이 있습니다( read -aPOSIX가 아닌 bash에만 해당). 이를 수행하는 다른 방법(awk, perl)이 있습니다. 데이터가 더 복잡하면 (1 a,"b,c",d)(1 a,b\,c,d)스크립트가 원하는 대로 작동하지 않을 수 있습니다.

답변3

이것을 시도해 보십시오:

sild@:/tmp $ cat test
1 a,b,c
2 z
3 d,f
sild@:/tmp $ cat test.sh 
#!/bin/bash
separator=","
cat test | while read line; do
 head="`echo $line | cut -d" " -f1`"
 IFS="$separator" read -ra nodes <<< "`echo $line | cut -d" " -f2-`"
 for i in "${nodes[@]}"; do
         echo $head $i
     done
 done
sild@:/tmp $ ./test.sh 
1 a
1 b
1 c
2 z
3 d
3 f
sild@:/tmp $ 

답변4

펄 솔루션:

perl -ane 'print map "$F[0] $_\n" ,split(",",$F[1])' file
1 a
1 b
1 c
2 z
3 d
3 f

관련 정보