【问题标题】:Adding a column with awk使用 awk 添加列
【发布时间】:2013-04-01 20:02:26
【问题描述】:

我想在每一行的开头添加一个新列。使用的命令:

tree -afispugD --inodes

我想添加一个新列作为文件名。

例子:

119801433 -rwxr--r-- u1915811 alum          1252 Apr  1 21:06  ./file
119802284 -rw-r--r-- u1915811 alum          1255 Mar 20 10:25  ./text.txt
119865862 drwxr-xr-x u1915811 alum          4096 Feb 27 10:20  ./S3/folder2

到这里:

file       119801433 -rwxr--r-- u1915811 alum          1252 Apr  1 21:06  ./file
text.txt   119802284 -rw-r--r-- u1915811 alum          1255 Mar 20 10:25  ./text.txt
folder2    119865862 drwxr-xr-x u1915811 alum          4096 Feb 27 10:20  ./S3/folder2

PS:我必须这样做,因为tree 命令不显示名称:(

【问题讨论】:

    标签: bash shell awk command add


    【解决方案1】:

    你只需要:

    $ awk -F'/' '{print $NF,$0}' file
    file 119801433 -rwxr--r-- u1915811 alum          1252 Apr  1 21:06  ./file
    text.txt 119802284 -rw-r--r-- u1915811 alum          1255 Mar 20 10:25  ./text.txt
    folder2 119865862 drwxr-xr-x u1915811 alum          4096 Feb 27 10:20  ./S3/folder2
    

    或者如果您想在输出中使用一些特定的间距,请使用 printf 而不是 print:

    $ awk -F'/' '{printf "%-10s%s\n",$NF,$0}' file
    file      119801433 -rwxr--r-- u1915811 alum          1252 Apr  1 21:06  ./file
    text.txt  119802284 -rw-r--r-- u1915811 alum          1255 Mar 20 10:25  ./text.txt
    folder2   119865862 drwxr-xr-x u1915811 alum          4096 Feb 27 10:20  ./S3/folder2
    

    或者,由于这是单行的简单替换,您可以使用 sed 代替 awk:

    $ sed 's/\(.*\/\(.*\)\)/\2 \1/' file
    file 119801433 -rwxr--r-- u1915811 alum          1252 Apr  1 21:06  ./file
    text.txt 119802284 -rw-r--r-- u1915811 alum          1255 Mar 20 10:25  ./text.txt
    folder2 119865862 drwxr-xr-x u1915811 alum          4096 Feb 27 10:20  ./S3/folder2
    

    【讨论】:

      【解决方案2】:

      如果文件名中有空格或者是符号链接,这个也可以工作

      tree -afispugD --inodes | awk '{FS="./"; ORS=""; printf("%-60s%s\n",$NF,$0)}'
      

      【讨论】:

      • 你知道你在文件的每一行都设置了FSORS的值!?你应该改为awk '{printf("%-60s%s\n",$NF,$0)}' FS="./" ORS=""
      • 我搜索了它,发现在 BEGIN 块中执行此操作更好,因为它在读取第一个输入记录之前执行了一次。非常感谢:)
      • 是的,您也可以在 BEGIN 块中设置值,但对于单行,只需在脚本之后设置值
      • 好吧,我不知道!再次感谢:)
      【解决方案3】:

      直到文件名中有空格,这应该可以工作:

      tree -afispugD --inodes | awk '{printf("-30s%s\n",$NF,$0}'
      

      【讨论】:

        猜你喜欢
        • 2017-05-06
        • 2023-02-05
        • 1970-01-01
        • 2017-07-09
        • 2014-07-31
        • 1970-01-01
        • 1970-01-01
        • 2022-07-07
        • 1970-01-01
        相关资源
        最近更新 更多