我正在使用find /usr/local -ls
。它显示如下:
19799045 4 drwxr-xr-x 9 hduser root 4096 Feb 23 11:00 /usr/local
我必须将数据以逗号分隔,如下所示:
19799045,4,drwxr-xr-x,9,hduser,root,4096,Feb 23 11:00,/usr/local
怎么做?
答案 0 :(得分:-1)
你可以使用这个可爱的awk命令:
find /usr/local -ls | awk '{s="";for(i=1;i<=7;i++)s=s$i",";s=s$8" "$9" "$10;for(i=11;i<=NF;i++)s=s$i;print s}'
如果您希望将awk命令放在文件中,或者实际读取它:
{
s = ""
for (i = 1; i <= 7; i++)
s = s$i","
s = s $8" "$9" "$10","
for (i = 11; i <= NF; i++)
s = s$i" "
print s
}
如果文件名包含多个连续的空格,或者除了普通空格以外的空格字符,则会稍微改变文件名。当您使用几乎不适合该任务的工具解析未设计为解析的输出时,这只是乐趣的一部分。
答案 1 :(得分:-1)
从另一个问题,您可以使用-printf功能
find /usr/local -printf "%i,%k,%M,%n,%u,%g,%s,%t,%p\n"
然后,您还可以选择自己喜欢的功能。
答案 2 :(得分:-1)
作为一般编程原则,以您需要的格式生成数据要比以错误的格式生成数据然后进行翻译要容易得多。
由于您已经在使用非标准的非可移植-ls
主数据库,因此如果-printf
的实现具有此功能,您也可以使用find
。这样的事情可以让你更接近你需要的东西:
find /usr/local -printf '%i,%b,%M,%n,%u,%g,%s,%Tc,%h/%f'