데이터를 전치하는 파일 처리 [닫기]

데이터를 전치하는 파일 처리 [닫기]

다음과 같은 ID와 이름이 포함된 파일이 있습니다.

1234|abc|cde|fgh
5678|ijk|abc|lmn
9101|cde|fgh|klm
1213|klm|abc|cde

아래와 같이 각 이름과 일치하는 ID를 가진 다른 파일로 출력을 얻어야 합니다.

파일 1:

abc
1234
5678
1213

파일 2:

cde
1234
9101
1213

파일 3:

Klm
9101
1213

파일 4:

fgh
1234
9101

답변1

문제는 두 번째, 세 번째, 네 번째, ..n 필드에 있는 모든 문자열에 대해 해당 문자열로 시작하는 파일을 작성하고 첫 번째 필드 문자열에 나타나는 모든 줄을 나열하는 것이라고 가정합니다.

$ awk -F\| '{
   for(i=2; i <= NF; i++){
        if(!a[$i]){ a[$i] = "file_" ++f; print $i > a[$i] }
        print $1 > a[$i];
   }
}'
1234|abc|cde|fgh
5678|ijk|abc|lmn
9101|cde|fgh|klm
1213|klm|abc|cde
^D
$ for f in file_*; do echo === $f ===; cat $f; done
=== file_1 ===
abc
1234
5678
1213
=== file_2 ===
cde
1234
9101
1213
=== file_3 ===
fgh
1234
9101
=== file_4 ===
ijk
5678
=== file_5 ===
lmn
5678
=== file_6 ===
klm
9101
1213

답변2

awk -F '|' '
   {
    for(i = 2; i <= NF; i++)
        print $1 > $i;
    }
' yourFile.txt

스크립트는 다른 열에 있는 모든 파일 이름에 첫 번째 열을 씁니다.

세부 사항:

  • -F '|'필드 구분 기호를 파이프 문자로 설정
  • for(...)2열부터 마지막 ​​열까지
  • print $1 > $i열 이름이 있는 파일에 열 1의 내용을 씁니다.i

답변3

ID를 어디서 얻었는지 확실하지 않습니다.
하지만 가지고 있다고 가정하면 다음과 같이 시도해 볼 수 있습니다.

for id in abc cde klm fgh; do
    awk -F'|' -v id=$id 'BEGIN{print id} $0 ~ id { print $1; }' test > $id
done

관련 정보