如何在bash的第二列中删除没有内容的行?

如何在bash的第二列中删除没有内容的行?,bash,curl,Bash,Curl,这是curl-s ifconfig.me/all | column-t的示例输出: 我喜欢以这样一种方式解析它,即user_agent字段不获取制表符,并删除所有字段而不产生任何结果 ip_addr: 193.136.19.55 remote_host: gwec.di.uminho.pt user_agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1

这是curl-s ifconfig.me/all | column-t的示例输出:

我喜欢以这样一种方式解析它,即user_agent字段不获取制表符,并删除所有字段而不产生任何结果

ip_addr:      193.136.19.55
remote_host:  gwec.di.uminho.pt
user_agent:   curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
port:         37429
mime:         */*
使用awk,您可以使用awk“$2”,这将检查第二个字段是否存在。如果它确实存在,将打印该行

就你而言

curl -s ifconfig.me/all | column -t | awk '$2'
实例 我喜欢以这样一种方式来解析它,即user\u agent字段不会 获取选项卡,并删除所有没有结果的字段

ip_addr:      193.136.19.55
remote_host:  gwec.di.uminho.pt
user_agent:   curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
port:         37429
mime:         */*
使用输入字段分隔符FS=tab和输出字段分隔符OFS=space,如下所示:

$ awk 'BEGIN{FS="\t";OFS=" "} $2 {printf "%s\t",$1; for (i=2; i<=NF; i++) printf $i ; printf "\n"}' your_result
ip_addr:        193.136.19.55
remote_host:    gwec.di.uminho.pt
user_agent:     curl/7.22.0(x86_64-pc-linux-gnu)libcurl/7.22.0OpenSSL/1.0.1zlib/1.2.3.4libidn/1.23librtmp/2.3
port:   37429
mime:   */*
使用awk,您可以使用awk“$2”,这将检查第二个字段是否存在。如果它确实存在,将打印该行

就你而言

curl -s ifconfig.me/all | column -t | awk '$2'
实例 我喜欢以这样一种方式来解析它,即user\u agent字段不会 获取选项卡,并删除所有没有结果的字段

ip_addr:      193.136.19.55
remote_host:  gwec.di.uminho.pt
user_agent:   curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
port:         37429
mime:         */*
使用输入字段分隔符FS=tab和输出字段分隔符OFS=space,如下所示:

$ awk 'BEGIN{FS="\t";OFS=" "} $2 {printf "%s\t",$1; for (i=2; i<=NF; i++) printf $i ; printf "\n"}' your_result
ip_addr:        193.136.19.55
remote_host:    gwec.di.uminho.pt
user_agent:     curl/7.22.0(x86_64-pc-linux-gnu)libcurl/7.22.0OpenSSL/1.0.1zlib/1.2.3.4libidn/1.23librtmp/2.3
port:   37429
mime:   */*
带有示例输入的输出:

ip_addr:      193.136.19.55
remote_host:  gwec.di.uminho.pt
user_agent:   curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
port:         37429
mime:         */*
带有示例输入的输出:

ip_addr:      193.136.19.55
remote_host:  gwec.di.uminho.pt
user_agent:   curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
port:         37429
mime:         */*

谢谢您知道用户代理字段的解决方案吗?最好使用printf进行对齐输出。此外,使用$2到$8是有限的,如果其他字段超过8,则可能不包括这些字段。请看我的帖子,其中的概念似乎被复制了。@konsolebox相信我,我没有复制,我现在只是看到了你的答案。无论如何,我已经更新了我的答案,所以它与你的不同。我用for循环得到了同样的结果。谢谢!您知道用户代理字段的解决方案吗?最好使用printf进行对齐输出。此外,使用$2到$8是有限的,如果其他字段超过8,则可能不包括这些字段。请看我的帖子,其中的概念似乎被复制了。@konsolebox相信我,我没有复制,我现在只是看到了你的答案。无论如何,我已经更新了我的答案,所以它与你的不同。我用for循环得到了同样的结果。谢谢,它太完美了!你能解释一下输入吗?谢谢,它太完美了!你能解释一下输入吗?