【问题标题】:Can I change the order of the output fields from the Linux cut command? [duplicate]我可以从 Linux cut 命令更改输出字段的顺序吗? [复制]
【发布时间】:2012-12-16 05:37:00
【问题描述】:

我在命令行中使用 cut 命令,似乎无法获得我喜欢的输出。 你知道我为什么会得到这个吗?是不是我做错了什么?

这是正常输出,我想以不同的顺序输出:

[root@upbvm500 root]# ls -al IDS_DIR/a | tr -s " "
-rw-r--r-- 1 root root 0 Jan 1 17:18 IDS_DIR/a
[root@upbvm500 root]#

[root@upbvm500 root]# ls -al IDS_DIR/a | tr -s " " | cut -d" " -f5,6,7,8,3,4,1
-rw-r--r-- root root 0 Jan 1 17:18

但正如您所见,这并没有像预期的那样工作。 知道他们为什么要换地方吗?

【问题讨论】:

  • 猜测您想要更改字段的顺序,您可能想要使用任意数量的其他工具,例如 sed。使用 sed,你可以写一个替换命令来解决这个问题。
  • 是的,这就是我想做的,但我不知道为什么这不适用于 cut。
  • 根据手册页,cut 不会那样做。
  • 不解析ls的输出。

标签: linux bash shell awk cut


【解决方案1】:

cut 不会重新排序其输出。它只是收集要打印的列的列表,然后在它们到达时将它们打印出来。

使用不同的工具(例如 Awk)对输出列重新排序。

但是,在这种特殊情况下,请尝试使用 statfind 而不是 ls。一般不建议尝试解析来自ls 的输出。见http://mywiki.wooledge.org/ParsingLs

【讨论】:

    【解决方案2】:

    来自man cut

    所选输入的写入顺序与读取顺序相同,并且只写入一次。

    使用awk '{print $5,$6,$7,$8,$3,$4,$1}' 而不是cut

    【讨论】:

    • 当然,如果某个文件名中包含一个或多个空格,那将无法正常工作...
    • @MatsPetersson 是的,很好,但cut!
    【解决方案3】:

    正如其他人所提到的,不要解析 ls。如果需要文件信息,请使用stat

    stat -c "%s %y %U %G %A %n" filename
    

    您可能需要做一些额外的工作才能根据需要格式化时间戳。

    $ ls -l data
    -rw-r--r-- 1 glennj glennj 13 2013-01-01 11:19 data
    $ LC_TIME=POSIX ls -l data
    -rw-r--r-- 1 glennj glennj 13 Jan  1 11:19 data
    
    $ stat -c "%s %y %U %G %A %n" data 
    13 2013-01-01 11:19:53.670015242 -0500 glennj glennj -rw-r--r-- data
    $ stat -c "%s %Y %U %G %A %n" data | awk '{$2 = strftime("%b %e %H:%M", $2)} 1'
    13 Jan  1 11:19 glennj glennj -rw-r--r-- data
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 2015-09-03
      • 1970-01-01
      • 2018-07-08
      • 2012-08-20
      • 2019-04-03
      • 1970-01-01
      相关资源
      最近更新 更多