
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로 설정됩니다 .$5
c