我在 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
也不$5
匹配,c
将设置为 1。