使用awk添加列

时间:2013-04-01 20:02:26

标签: bash shell awk command add

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

  

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命令没有显示名字:(

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果文件的名称中有空格或者它是符号链接,那么这个也可以使用

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

答案 2 :(得分:0)

在文件名中有空格之前,这应该有效:

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