awk 和 printf 插入额外的换行符
awk and printf inserting extra newline
我正在努力显示以下文件:
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
我想要的是在同一行上用space分隔的第一、第二和第五列。我正在使用 awk:
#!/bin/bash
index="/opt/easy-rsa/easyrsa3/pki/index.txt"
for line in $(awk '{printf "%c %i %s\n", , , } ' ${index}); do
if ! [[ ${line} =~ ^R.* ]]; then
printf "%s\n" $line ;
fi
done
然而,我得到的输出是:
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
我不明白额外的换行符是从哪里来的。
添加空格是因为 for line in $(awk ...)
在空格而不是换行处拆分 awk
的输出。
您可以通过将 IFS
设置为仅包含换行符或将 awk
管道连接到 while read line
循环来解决此问题。但是在 awk
.
中完成整个事情会更简单
awk ' != "R" {printf "%c %i %s\n", , , } ' "${index}"
我正在努力显示以下文件:
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
我想要的是在同一行上用space分隔的第一、第二和第五列。我正在使用 awk:
#!/bin/bash
index="/opt/easy-rsa/easyrsa3/pki/index.txt"
for line in $(awk '{printf "%c %i %s\n", , , } ' ${index}); do
if ! [[ ${line} =~ ^R.* ]]; then
printf "%s\n" $line ;
fi
done
然而,我得到的输出是:
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
我不明白额外的换行符是从哪里来的。
添加空格是因为 for line in $(awk ...)
在空格而不是换行处拆分 awk
的输出。
您可以通过将 IFS
设置为仅包含换行符或将 awk
管道连接到 while read line
循环来解决此问题。但是在 awk
.
awk ' != "R" {printf "%c %i %s\n", , , } ' "${index}"