将以空格分隔的数据更改为以逗号分隔的数据

时间:2018-02-23 13:54:36

标签: linux shell

我正在使用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 

怎么做?

3 个答案:

答案 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'