Linux 以表格作为分隔符的awk
我有以下输出Linux 以表格作为分隔符的awk,linux,bash,shell,awk,Linux,Bash,Shell,Awk,我有以下输出 root@root# adsl info --state|grep "Upstream rate" Max: Upstream rate = 1120 Kbps, Downstream rate = 8948 Kbps Bearer: 0, Upstream rate = 1021 Kbps, Downstream rate = 4095 Kbps 上述输出中的表格如所示 root@root# adsl info --state|grep "Upstream rate" M
root@root# adsl info --state|grep "Upstream rate"
Max: Upstream rate = 1120 Kbps, Downstream rate = 8948 Kbps
Bearer: 0, Upstream rate = 1021 Kbps, Downstream rate = 4095 Kbps
上述输出中的表格如所示
root@root# adsl info --state|grep "Upstream rate"
Max:<TAB>Upstream rate = 1120 Kbps, Downstream rate = 8948 Kbps
Bearer:<TAB>0, Upstream rate = 1021 Kbps, Downstream rate = 4095 Kbps
但它又回来了
Max: Upstream
Bearer: 0
甚至
返回
Max: Ups
Bearer: 0
我期望:
Max:
Bearer:
我想我必须在
-F
选项中添加制表分隔符。如何做到这一点?如果您的输入是您告诉我们的,每行的第一个空格是制表符,这就是制表符或逗号分隔字段的输入:
$ awk -F'[\t,]' '{print "$0 =",$0; for (i=1;i<=NF;i++) print "\t$"i,"=",$i}' file
$0 = Max: Upstream rate = 1120 Kbps, Downstream rate = 8948 Kbps
$1 = Max:
$2 = Upstream rate = 1120 Kbps
$3 = Downstream rate = 8948 Kbps
$0 = Bearer: 0, Upstream rate = 1021 Kbps, Downstream rate = 4095 Kbps
$1 = Bearer:
$2 = 0
$3 = Upstream rate = 1021 Kbps
$4 = Downstream rate = 4095 Kbps
它将在FS中使用文本制表符-这可能会有所不同。如果您的输入如您所说,每行中的第一个空格为制表符,则制表符或逗号分隔的字段将使用以下内容:
$ awk -F'[\t,]' '{print "$0 =",$0; for (i=1;i<=NF;i++) print "\t$"i,"=",$i}' file
$0 = Max: Upstream rate = 1120 Kbps, Downstream rate = 8948 Kbps
$1 = Max:
$2 = Upstream rate = 1120 Kbps
$3 = Downstream rate = 8948 Kbps
$0 = Bearer: 0, Upstream rate = 1021 Kbps, Downstream rate = 4095 Kbps
$1 = Bearer:
$2 = 0
$3 = Upstream rate = 1021 Kbps
$4 = Downstream rate = 4095 Kbps
它将在FS中使用文本制表符-这可能会有所不同。一个简单的
awk'{print$1}'
将完成此任务。当你说时,delimeters是制表符,
你的意思是制表符后面或前面有逗号的字符串是分隔符吗,或者你的意思是制表符或逗号是分隔符还是其他什么?如果您发布的输入版本中的制表符替换为“”或需要澄清的内容,这会有所帮助。@AvinashRaj print$1只是我想解析其他内容的一个示例fields@MOHAMED然后更新你的问题,以展示一个更有趣/更有意义的例子,说明你正在尝试做什么。你的输入并不像你告诉我们的那样。在Max:
和上游之间没有选项卡,在Ups
和tream
之间可能有选项卡,并且您的输入中可能有虚假的控制字符。对您的输入运行cat-v
查看。一个简单的awk'{print$1}'
就可以完成这项工作。当您说delimeters是制表符,
您的意思是制表符后跟或后跟逗号的字符串是分隔符,还是制表符或逗号是分隔符或其他什么?如果您发布的输入版本中的制表符替换为“”或需要澄清的内容,这会有所帮助。@AvinashRaj print$1只是我想解析其他内容的一个示例fields@MOHAMED然后更新你的问题,以展示一个更有趣/更有意义的例子,说明你正在尝试做什么。你的输入并不像你告诉我们的那样。在Max:
和上游之间没有选项卡,在Ups
和tream
之间可能有选项卡,并且您的输入中可能有虚假的控制字符。在您的输入上运行cat-v
,查看。我的cat受到限制,它来自忙框,它不包含-v选项catv
,而不是cat-v
。您是否尝试了我在上面的回答末尾建议的awk命令?如果那没用,恐怕你只能靠自己了;it’我试图猜测“忙盒”上有/没有哪些工具,哪些工具可能正常工作,哪些可能不正常。我的cat受到限制,它来自忙盒,它不包含-v选项catv
,而不是cat-v
。您是否尝试了我在上面的回答末尾建议的awk命令?如果那没用,恐怕你只能靠自己了;It’我试图猜测“忙盒”上有/没有哪些工具,哪些工具可能正常工作,哪些工具可能不正常工作,这是毫无意义的。
$ awk -F'[\t,]' '{print "$0 =",$0; for (i=1;i<=NF;i++) print "\t$"i,"=",$i}' file
$0 = Max: Upstream rate = 1120 Kbps, Downstream rate = 8948 Kbps
$1 = Max:
$2 = Upstream rate = 1120 Kbps
$3 = Downstream rate = 8948 Kbps
$0 = Bearer: 0, Upstream rate = 1021 Kbps, Downstream rate = 4095 Kbps
$1 = Bearer:
$2 = 0
$3 = Upstream rate = 1021 Kbps
$4 = Downstream rate = 4095 Kbps
$ awk -F'['$'\t'',]' '{print "$0 =",$0; for (i=1;i<=NF;i++) print "\t$" i, "=", $i}' file