如何使用awk引用文件名?

时间:2011-01-24 14:06:32

标签: bash

我想要输出'filename1','filename2' ,'filename3' ....

我使用awk ..但不知道如何在文件名后打印最后一个quoate。 它打印我,'filename ===>我需要','filename'

ls -ltr | grep -v ^d | sed '1d'| awk '{print "," sprintf("%c", 39) $9}' 

提前致谢!

6 个答案:

答案 0 :(得分:2)

您可以使用find命令:

find . -maxdepth 1 -type f -printf "'%f',"  | sed s/,$//

答案 1 :(得分:1)

如果你有Ruby(1.9 +)

ruby -e 'puts Dir["*"].select{|x|test(?f,x)}.join("\47,\47")'

否则

find . -maxdepth 1 -type f -printf '%f\n' | sed -e ':a N' -e "s@\n@','@" -e 'b a'

答案 2 :(得分:0)

答案 3 :(得分:0)

Pure bash(也可能是posix sh):

comma=
for file in * ; do
    if [ ! -d "$file" ] ; then
        if [ ! -z $comma ] ; then
            printf ","
        fi
        comma=1
        printf "'%s'" "$file"
    fi
done

名称中包含'的文件未计入,但其他人也没有这样做。假设用\转义是正确的,你可以这样做。

comma=
for file in * ; do
    if [ ! -d "$file" ] ; then
        if [ ! -z $comma ] ; then
            printf ","
        fi
        comma=1
        printf "'%s'" "${file//\'/\'}"
    fi
done

但有些CSV系统会要求您改为编写'',这将是

printf "'%s'" "${file//\'/''}"

答案 4 :(得分:0)

让我们假装您正在处理除ls输出之外的其他一些数据。

$ printf "hello\ngoodbye\no'malley\n" | awk '{gsub("\047","\047\\\047\047",$1);printf "%s\047%s\047",comma,$1; comma=","}END{printf "\n"}'
'hello','goodbye','o'\''malley'

答案 5 :(得分:0)

这个变种工作正常,但我认为应该有更优雅的方式来做到这一点。

ls -1 $ 1 |切-d'。' -f1 | awk'{printf“,”sprintf(“%c”,39)$ 1 sprintf(“%c”,39)“\ n”}'| sed'1 s /,* //'