2013-04-01 86 views
0

我想在每行的開始處添加一個新列。使用命令:使用awk添加列

樹-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命令不顯示名稱:(

回答

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代替打印:

$ 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 
+0

謝謝,那工作:) – Albert

0

這一次也將工作,如果文件名稱中有空格或者它是符號鏈接

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

你知道你正在設置文件中每行的'FS'和'ORS'的值!?你應該改爲'awk'{printf(「% - 60s%s \ n」,$ NF,$ 0)}'FS =「./」ORS =「」' –

+0

我搜索了它,發現在BEGIN塊更好,因爲在第一個輸入記錄被讀取之前它會被執行一次。非常感謝:) –

+0

是的,您也可以在'BEGIN'塊中設置值,但是對於一個班輪,只需在腳本後設置值 –

0

直到有文件名中的空間,這應該工作:

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