我确实有一个每一行长度不同的文件。例如:
a; 1; 2; 3; 4;
b; 11; 22;
c; 122; 233; 344; 45; 56;
d; 13;
e; 144; 25; 36; 47; 58; 69;我试图生成一个以分号分隔的文件,其中每一行都有相同的值。例如:
a; 1; 2; 3; 4; ; ;
b; 11; 22; ; ; ; ;
c; 122; 233; 344; 45; 56; ;
d; 13; ; ; ; ; ;
e; 144; 25; 36; 47; 58; 69;我用awk尝试了不同的方法,但我是新手,要让它成批正确地完成。
awk '{if( $4 == ""){print ";"}else{print $4}}' testtest.txt我希望群体智慧能帮我解决这个问题。
发布于 2022-11-29 08:31:52
使您的记录至少包含8个字段:
awk -F '; *' -v OFS='; ' '{$8 = $8} 1'限制:
例如,如果有一条带有8. 9字段的记录,则代码将而不是将其剥离到
发布于 2022-11-29 08:33:50
在显示的示例中,请尝试遵循awk代码。这更像是一个泛型代码,在整个Input_file中,第一次读取的字段数最多,然后发现它将其传递给第二次Input_file,并将每一行的NF值赋值给NF值,这将根据需要给出字段的总数,并为新添加的字段放置;。
awk -v FS='; ' -v OFS='; ' '
FNR==NR{
nf=(nf>NF?nf:NF)
next
}
{
$nf=$nf
}
1
' Input_file Input_file发布于 2022-11-29 09:51:31
@RavinderSingh13的答案有效,但需要在参数列表中重复输入文件名,这可以通过修改ARGC和ARGV来避免。
awk '
BEGIN{
FS=OFS="; "
}
NR==1{
ARGV[ARGC++] = FILENAME
}
FNR==NR{
nf=(nf>NF?nf:NF)
next
}
{
NF=nf
}
1
' testtest.txthttps://stackoverflow.com/questions/74610882
复制相似问题