试图通过awk处理文件输出

试图通过awk处理文件输出,awk,Awk,我正在尝试分析以下命令的输出 hdfs dfs -count 在大多数情况下,我可以得到我想要的,但是,我对第一件有意见 1 23 1118275 /user/data/system/sys_1/... 1 23 1515762 /user/data/system/sys_2/... 1 23 1892459 /user/data/system/sy

我正在尝试分析以下命令的输出

hdfs dfs -count 
在大多数情况下,我可以得到我想要的,但是,我对第一件有意见

   1           23            1118275 /user/data/system/sys_1/...
   1           23            1515762 /user/data/system/sys_2/...
   1           23            1892459 /user/data/system/sys_3/...
我正在使用awk处理…例如

 awk ' BEGIN { FS="[/]"; OFS="," } { print $1,$2,$3,$(NF-1),$0 } '
…但是我得到的第一个块是未处理的,例如

   1           23            1118275 
   1           23            1515762 
   1           23            1892459 
我试过

{ FS="[ /]"; OFS="," }
但是有一个空格,但它给了我一个逗号的输出,它看不到/

总之,我可以通过/解析,但只在一定程度上,它似乎忽略了块空间

如果有人对此感到困惑,我道歉,这是相当棘手的解释是怎么回事。基本上,1美元是一个区块,我无法正确处理它。我试图将其作为FS=“/”的一部分进行解析,但根本不起作用

substr($1,x,y)也不能正常工作,它认为块是不能分割的。我现在正在做这个

awk ' BEGIN { FS="[/]" } { print substr($1,37) } '
我隔离了文件大小

 1118275
 1515762
 1892459
 1990075
  882355
 2125763
 1841735
 2260994
 1082926
13649144
但是如果我尝试这样的事情

 awk ' BEGIN { FS="[/]" } { print substr($1,24,24) } '
我明白了

23            1118275
23            1515762
23            1892459
23            1990075
23             882355
23            2125763
23            1841735

我希望这更清楚一点,但可能不是。

这是一个快速而肮脏的回答,但根据你的评论,这接近你想要的吗

BEGIN { FS="[/]"; OFS="," } {
    z = split($1,aa," ")
    print aa[1],aa[2],aa[3],$2,$3,$(NF-1),$0
}

这是一个快速而肮脏的回答,但根据你的评论,这接近你想要的吗

BEGIN { FS="[/]"; OFS="," } {
    z = split($1,aa," ")
    print aa[1],aa[2],aa[3],$2,$3,$(NF-1),$0
}

命令输出的是什么?你期望的结果是什么?现在还不清楚,我也没有一个Hadoop框来运行这个命令来查看它会发出什么。我不确定我是否理解你的问题,但听起来你想对每条记录的第一个字段的内容进行额外的处理。您是否考虑过完全忽略OFS参数,然后在对每行执行print命令之前处理$1的内容?该命令类似于hdfs dfs-count/user/data/system/*…它会弹出目录,与每个记录关联的分区和文件大小…计数类似于执行hdfs dfs-ls,除了列出的文件之外,我得到目录下文件的摘要…我希望有1,231118275的输出,即。,逗号分隔…目前我得到的是1231118275,它不是逗号分隔的,即使我尝试指定为FS=“/”…至少使用FS=“/”,我得到一个半可用的输出…当我尝试在“”上使用FS时,我得到一个空输出。命令输出的是什么?你期望的结果是什么?现在还不清楚,我也没有一个Hadoop框来运行这个命令来查看它会发出什么。我不确定我是否理解你的问题,但听起来你想对每条记录的第一个字段的内容进行额外的处理。您是否考虑过完全忽略OFS参数,然后在对每行执行print命令之前处理$1的内容?该命令类似于hdfs dfs-count/user/data/system/*…它会弹出目录,与每个记录关联的分区和文件大小…计数类似于执行hdfs dfs-ls,除了列出的文件之外,我得到目录下文件的摘要…我希望有1,231118275的输出,即。,逗号分隔…目前我得到的是1231118275,它不是逗号分隔的,即使我尝试指定为FS=“/”…至少使用FS=“/”,我得到一个半可用的输出…当我尝试使用FS on“”时,我得到一个空输出。感谢您的提示!我做了这个awk'BEGIN{FS=“[/]”OFS=“,”}{split($1,a,”);print a[2],a[3]}并成功地分割了$1块,得到了231118275,等等。谢谢你的提示!我做了这个awk'BEGIN{FS=“[/]”OFS=“,”}{split($1,a,”);print a[2],a[3]}并成功地分割了$1块,得到了231118275,等等。