首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >awk和printf插入额外的换行符

awk和printf插入额外的换行符
EN

Stack Overflow用户
提问于 2021-11-03 02:11:04
回答 1查看 36关注 0票数 0

我正在处理显示以下文件:

代码语言:javascript
运行
复制
V   220504203222Z       553A21806C0B711ED9E112E0B6680BED    unknown /C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=ovpn-server-2020/emailAddress=m@icloud.com
R   220925164608Z 211103011032Z E5D625C06F3D6DA4D3A92C092E8D12A0    unknown /C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=grom/emailAddress=m2@icloud.com
V   220925165555Z       185B52B7D6ABFF011FB0D7F826DE8851    unknown /C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=bind9/emailAddress=martinschmid82@icloud.com
V   220925171609Z       8764585492AE0097F76DFD7C9E2E75C7    unknown /C=DE/ST=BY/L=FU/O=a/OU=msc-dev/CN=bind-9/emailAddress=martinschmid82@icloud.com
V   220925171854Z       5B7D28350F750F5745553E0647B79F63    unknown /C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=qnap/emailAddress=m@icloud.com
V   220929131353Z       99E85C7B92BFF646480854B282288E2A    unknown /C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=ftp/emailAddress=m@icloud.com
V   221012163300Z       39403EA3995349FF8FEC487BD59A1F98    unknown /C=DE/ST=BY/L=FU/O=akaritech.com/OU=msc-dev/CN=masc-mbp/emailAddress=martinschmid82@icloud.com
V   221012163553Z       80668723276AB0B93CF6765F5EA56837    unknown /C=DE/ST=BY/L=FU/O=akaritech.com/OU=msc-dev/CN=masc-ipad/emailAddress=m@icloud.com
V   221016205831Z       7ABD06B289E35D084D19EA170B8F2EC0    unknown /C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=monitoring.brave-vesperia.com/emailAddress=m@icloud.com

我想要的是第一列、第二列和第五列在同一行上用空格分隔。我使用的是awk:

代码语言:javascript
运行
复制
#!/bin/bash

index="/opt/easy-rsa/easyrsa3/pki/index.txt"

for line in $(awk '{printf "%c %i %s\n", $1, $2, $5} ' ${index}); do
   if ! [[ ${line} =~ ^R.* ]]; then 
      printf "%s\n" $line ; 
   fi 
done

但是,我得到的输出是:

代码语言:javascript
运行
复制
V
220504203222
/C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=ovpn-server-2020/emailAddress=m@icloud.com
220925164608
unknown
V
220925165555
/C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=bind9/emailAddress=m@icloud.com
V
220925171609
/C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=bind-9/emailAddress=m@icloud.com
V
220925171854
/C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=qnap/emailAddress=m@icloud.com
V
220929131353
/C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=ftp/emailAddress=m@icloud.com
V
221012163300
/C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=masc-mbp/emailAddress=m@icloud.com
V
221012163553
/C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=masc-ipad/emailAddress=m@icloud.com
V
221016205831
/C=DE/ST=BY/L=FU/O=a.com/OU=msc-dev/CN=monitoring.brave-vesperia.com/emailAddress=m@icloud.com

我不明白额外的换行符是从哪里来的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-03 02:15:50

添加空格是因为for line in $(awk ...)awk的输出拆分为空格,而不是换行符。

您可以通过将IFS设置为只包含换行符或将awk管道到while read line循环来解决此问题。但在awk中只做所有的事情会更简单。

代码语言:javascript
运行
复制
awk '$1 != "R" {printf "%c %i %s\n", $1, $2, $5} ' "${index}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69818903

复制
相关文章

相似问题

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