我有一个基于目录中某个模式的文件列表,我想在其中连接一些分隔符。
例如:像这样的目录中有多个文件
File1.csv
File2.csv
File3.csv
输出:File1.csv,File2.csv,File3.csv
注意-我只想连接文件的名称,并将其作为输出而不是数据返回。
我们如何在UNIX中做到这一点?任何帮助都将不胜感激。
我试过";粘贴";命令,但这也会连接数据。
您可以使用一个简单的shell管道,如下所示:
ls -1 *.csv | tr 'n' ',' | sed 's/,$//'
ls -1
在不同的行中为您获取文件名tr
将换行符映射为逗号sed
删除尾部逗号
find . -maxdepth 1 -name "*.csv" -type f -printf "%f," |
awk '{ print substr($0,1,(length($0)-1))}'
使用find的printf在每个文件的末尾添加逗号,然后通过管道连接到awk以删除最后一个尾随逗号。
将find
与Perl一行代码一起使用:
find . -printf "%fn" | perl -lne 'push @f, $_; END { print join q{,}, @f; }'
Perl一行程序使用以下命令行标志:-e
:告诉Perl在线查找代码,而不是在文件中查找代码-n
:一次循环输入一行,默认情况下将其分配给$_
-l
:在线执行代码之前,剥去输入行分隔符(默认为*NIX上的"n"
(,并在打印时附加。
打印文件并使用paste
。
find . -maxdepth 1 -name "*.csv" -type f | paste -sd,
来自ls
手册页:
-m fill width with a comma separated list of entries
所以你可以做:
ls -m *.csv | tr -d ' '
tr -d ' '
(你也可以使用tr -d '[:space:]'
(是用来删除逗号和下一个文件之间的空格,没有输出会看起来像File1.csv, File2.csv
或
ls -m *.csv | sed 's/, /,/g'
第二个更好,因为如果你的文件名中有空格,它不会删除它们。