Você pode usar FIELDWIDTHS
, embora essa seja uma extensão gawk
e não tão portátil. Você também pode nomear campos como, por exemplo:
awk '
BEGIN {
FIELDWIDTHS = "10 9 13 11 32"
team=1; colour=2; game=3; rainfall=4; name=5;
}
NR == 1 {
next
}
/./ {
print $3, $name
} ' fixwdata
As larguras em FIELDWIDTHS
são compostas da seguinte forma:
Team Colour Game Rainfall PlayerName
XYZ Blue Cricket Yes Kapil
# <- 10 -><- 9 -><- 10 -><- 11 -><- NN -> FIELDWIDTHS
# $1 $2 $3 $4 $5 Field numbers
Opcionalmente, você pode usar, por exemplo, substr () . Se a primeira linha contiver nomes exclusivos
onde não há repetição, ou seja, não Name
, TeamName
, você poderia usar index()
.
Isso parece um pouco frágil. Se os dados tiverem largura fixa, você poderá codificar isso, mas alguns programas também expelem a largura fixa - , mas também alinham os dados de acordo
a largura dos dados. Então você pode obter:
Output1:
FLD1 FLD2
foo bar
Output2:
FLD1 FLD2
foobaz bar
Este exemplo não apresenta repetição de nomes em outros nomes:
awk '
function get_fld(fld_name)
{
return substr($0, col[fld_name"s"], col[fld_name"w"]);
}
BEGIN {
team=1
colour=2
game=3
rainfall=4
name=5
}
NR == 1 {
col["1s"]=0
col["2s"]=index($0, $2)
col["3s"]=index($0, $3)
col["4s"]=index($0, $4)
col["5s"]=index($0, $5)
col["1w"]=col["2s"] - 1
col["2w"]=col["3s"] - col["2s"]
col["3w"]=col["4s"] - col["3s"]
col["4w"]=col["5s"] - col["4s"]
col["5w"]=22
next
}
/./ {
printf(\
"%-5s {\n"\
"%12s: %s\n"\
"%12s: %s\n"\
"%12s: %s\n"\
"%12s: %s\n"\
"}\n",
get_fld(name),
"Team", get_fld(team),
"Colour", get_fld(colour),
"Game", get_fld(game),
"Rainfall", get_fld(rainfall));
} ' fixwdata
Entrada:
Team Colour Game Rainfall PlayerName
ABC Blue Cricket Yes Kapil
DEF Red Cricket Konos
DEF Yellow Go Kripl
DUX Black
Zon Purple Golf No Gim
Zon Purple Golf No Jom
Saída:
Kapil {
Team: ABC
Colour: Blue
Game: Cricket
Rainfall: Yes
}
Konos {
Team: DEF
Colour: Red
Game: Cricket
Rainfall:
}
Kripl {
Team: DEF
Colour: Yellow
Game: Go
Rainfall:
}
{
Team: DUX
Colour: Black
Game:
Rainfall:
}
Gim {
Team: Zon
Colour: Purple
Game: Golf
Rainfall: No
}
Jom {
Team: Zon
Colour: Purple
Game: Golf
Rainfall: No
}