col1이 col4/col5와 일치하면 col1의 빈 줄에 col4/col5의 모든 값을 각각 인쇄합니다.

col1이 col4/col5와 일치하면 col1의 빈 줄에 col4/col5의 모든 값을 각각 인쇄합니다.

Linux 시스템에 쉼표로 구분된 텍스트 파일이 있습니다. 먼저 col1을 col4 및 col5와 일치시키고 col1이 col4와 일치하면 col1이 비어 있는 모든 행에서 col4의 모든 값을 인쇄하고 col1이 col5와 일치하면 col1이 모두 비어 있는 모든 행에서 5번째 열을 인쇄합니다. 새 값이 열 1에 나타날 때까지 값. 입력 파일:

va,group,subgroup,minor,major 
A,AGT,rs123,A,G
 ,AGT,rs456,G,T
 ,AGT,rs457,T,G
 ,AGT,rs667,A,T
G,GSTT1,rs234,A,G
 ,GSTT1,rs668,T,G
 ,GSTT1,rs556,A,G

예상 출력:

va,group,subgroup,minor,major 
A,AGT,rs123,A,G
G,AGT,rs456,G,T
T,AGT,rs457,T,G
A,AGT,rs667,A,T
G,GSTT1,rs234,A,G
G,GSTT1,rs668,T,G
G,GSTT1,rs556,A,G

내가 시도한 것은 다음과 같습니다.

if [ $1 == $4] && [ -z "$1" ]
then
   awk -F"\t -v OFS="\t" '{ for(N=1; N<=NF; N++) if($N=="") $N=$4 } 1' file > tmp1
else
  echo "stop"
fi

답변1

다음과 같이 사용할 수 있습니다.

awk '
  BEGIN{FS=OFS=","; c=1}
  $1==" "{$1=$c;print;next}
  {c=1}
  $1==$4{c=4}
  $1==$5{c=5}1
' file
  • $4둘 다 일치하는 경우 $5마지막 항목이 우선 적용됩니다(여기: $5).
  • 첫 번째 줄이 비어 있거나 일치도 일치도 $4아닌 경우 1로 설정됩니다 .$5c

관련 정보