首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果为空,则添加分号

如果为空,则添加分号
EN

Stack Overflow用户
提问于 2022-11-29 08:09:21
回答 3查看 77关注 0票数 3

我确实有一个每一行长度不同的文件。例如:

代码语言:javascript
复制
a; 1; 2; 3; 4;  
b; 11; 22;  
c; 122; 233; 344; 45; 56;  
d; 13;  
e; 144; 25; 36; 47; 58; 69;

我试图生成一个以分号分隔的文件,其中每一行都有相同的值。例如:

代码语言:javascript
复制
a; 1; 2; 3; 4; ; ;  
b; 11; 22; ; ; ; ;  
c; 122; 233; 344; 45; 56; ;  
d; 13; ; ; ; ; ;  
e; 144; 25; 36; 47; 58; 69;

我用awk尝试了不同的方法,但我是新手,要让它成批正确地完成。

代码语言:javascript
复制
awk '{if( $4 == ""){print ";"}else{print $4}}' testtest.txt

我希望群体智慧能帮我解决这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-11-29 08:31:52

使您的记录至少包含8个字段:

代码语言:javascript
复制
awk -F '; *' -v OFS='; ' '{$8 = $8} 1'

限制:

  • 想要的字段数是以静态方式指定的,因此您需要知道输入文件中有多少字段(请参阅@RavinderSingh13 answer来确定字段的数量)。

例如,如果有一条带有8. 9字段的记录,则代码将而不是将其剥离到

票数 4
EN

Stack Overflow用户

发布于 2022-11-29 08:33:50

在显示的示例中,请尝试遵循awk代码。这更像是一个泛型代码,在整个Input_file中,第一次读取的字段数最多,然后发现它将其传递给第二次Input_file,并将每一行的NF值赋值给NF值,这将根据需要给出字段的总数,并为新添加的字段放置;

代码语言:javascript
复制
awk -v FS='; ' -v OFS='; ' '
FNR==NR{
  nf=(nf>NF?nf:NF)
  next
}
{
  $nf=$nf
}
1
'  Input_file  Input_file
票数 5
EN

Stack Overflow用户

发布于 2022-11-29 09:51:31

@RavinderSingh13的答案有效,但需要在参数列表中重复输入文件名,这可以通过修改ARGCARGV来避免。

代码语言:javascript
复制
awk '
BEGIN{
  FS=OFS="; "
}
NR==1{
  ARGV[ARGC++] = FILENAME
}
FNR==NR{
  nf=(nf>NF?nf:NF)
  next
}
{
  NF=nf
}
1
' testtest.txt
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74610882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档