Solução awk curta:
awk -F'[[:space:]]' '$2 && !$3{ $3="NA" }1' file
A saída:
1 id1 info
2 otherinfo
3 id2 NA
4 noinfo
5 id3 NA
6 id4 info2
Eu tenho um arquivo com muitas colunas e algumas células vazias em colunas diferentes. Eu gostaria de substituir as células vazias por NA apenas na terceira coluna. Meu arquivo:
1 id1 info
2 otherinfo
3 id2
4 noinfo
5 id3
6 id4 info2
Portanto, a saída deve ser:
1 id1 info
2 otherinfo
3 id2 NA
4 noinfo
5 id3 NA
6 id4 info2
Eu tentei este comando ( Substituindo o espaço em branco do valor ausente por zero ), mas substituiu todas as células vazias. Alguma sugestão?
Se o seu arquivo tiver colunas de largura fixa, você poderá analisá-las no GNU awk com FIELDWIDTHS
, por exemplo:
awk -v FIELDWIDTHS='1 1 3 1 99' -v OFS="" '!$5 { $5 = " NA" } 1' infile
Saída:
1 id1 info
2 otherinfo
3 id2 NA
4 noinfo
5 id3 NA
6 id4 info2
Este sed
funciona para mim:
sed -E 's/(.*id[0-9]{1,}$)/ NA/'
Exemplo:
sed -E 's/(.*id[0-9]{1,}$)/ NA/' NA.txt
1 id1 info
2 otherinfo
3 id2 NA
4 noinfo
5 id3 NA
6 id4 info2
Onde NA.txt
é este arquivo:
cat NA.txt
1 id1 info
2 otherinfo
3 id2
4 noinfo
5 id3
6 id4 info2