4 개의 열과 데이터가있는 텍스트 파일이 있습니다.
P_ID C_ID Code MSG
10 12 001 abcd
20 21 003 jklm
10 12 002 hijk
여기서 P_ID, C_ID, Code 및 MSG는 열입니다.
C_ID 열에 대해 검색을 수행해야합니다. 동일한 C_ID 값에 대한 여러 항목이 있지만 코드 및 MSG 열 값이 다른 경우 최종 파일은 아래의 예상 출력 파일에 표시된대로 결과를 가져야합니다. 여기서 code 및 msg 열 값은 단일 행에서 쉼표로 연결됩니다.
예상 출력은 다음과 같아야합니다.
P_ID C_ID Code MSG
10 12 001,002 abcd,hijk
20 21 003 jklm
다음은 출력입니다.
1: NF=4
$1=[P_ID]
$2=[C_ID]
$3=[Code]
$4=[MSG]
2: NF=4
$1=[10]
$2=[12]
$3=[001]
$4=[abcd]
3: NF=4
$1=[20]
$2=[21]
$3=[003]
$4=[jklm]
4: NF=4
$1=[10]
$2=[12]
$3=[002]
$4=[hijk]
첫 번째 답변에서 제공된 솔루션의 출력은 다음과 같습니다.
P_ID C_ID Code MSG
10 12 001 abcd
20 21 003 jklm
10 12 002 hijk
열 이름과 해당 데이터를 확인하는 awk 명령이 제대로 작동하지만 대답으로 제공된 첫 번째 명령이 예상 결과를 제공하지 않습니다.
질문이 명확 해지면 수정해야 할 수도 있지만 현재 상태에 따라
awk '
BEGIN { unique_vals = 0 }
NR == 1 { print }
NR > 1 {
if (seen[$2] == "") {
i = seen[$2] = unique_vals++
P_ID[i] = $1
C_ID[i] = $2
Code[i] = $3
MSG[i] = $4
} else {
i = seen[$2]
Code[i] = Code[i] "," $3
MSG[i] = MSG[i] "," $4
}
}
END {
for (i=0; i<unique_vals; i++) {
printf "%-15s%-11s%-15s%s\n", P_ID[i], C_ID[i], Code[i], MSG[i]
}
}
' file
일을하는 것 같습니다.
좋아, 나는 당신이 실행하는 방법을 알고 있다고 가정합니다 awk
. 그렇지 않다면 그렇게 말하십시오. 이 경우 다음 디버그 스크립트를 실행하십시오.
awk '
{
print NR ": NF=" NF
print " $1=[" $1 "]"
print " $2=[" $2 "]"
print " $3=[" $3 "]"
print " $4=[" $4 "]"
}
' file
입력 파일에 입력하고 질문에 출력을 게시하십시오. ( ```
"코드 펜스"를 사용하십시오 .) 그런 다음 여기에 다른 의견을 게시하여 그 작업을 수행했음을 알려주십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다