首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从csv-文件中的文件名中删除路径

如何从csv-文件中的文件名中删除路径
EN

Stack Overflow用户
提问于 2015-07-17 08:34:39
回答 3查看 335关注 0票数 1

我有一个csv文件,包括以下几行: 8;;

格罗特·施图德塔斯会见了“Twee Hanen”的gekleurde borduursel

De tas是吉阿克·范恩斯蒂夫·维尔特遇见了4毫米瓦尔特面包车

我们遇到了一些问题

范德塔斯是范斯塔夫

宾尼宁甚至还见过他。

Ook是de telefoon

De tas是ruim en praktisch

AFMETINGEN:

面罩: 46厘米(verstelbaar 7厘米)

Hoogte: 34厘米

het midden的Breedte : 42厘米

Bodemmaat: 30 x 10厘米

Schouderriem长55 cm tot 130 cm

Gebruikte materialen: vilt en kunstleer

Productiemethode: handwerk

在kleur 1.jpg;;;;;;;Fixed;New;Send;True,Vilten遇到了twee hanen;

包含的文件都有完整的路径,我只想要文件名。

于是2.jpg;变成了10_vilten_tas_2b_2.jpg;

正如您所看到的,路径的结构并不总是相同的。我可以使用某种linux命令吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-17 11:14:53

假设您的所有路径都是http://`/`,那么

代码语言:javascript
复制
sed 's~http://.*/~~' <file>

将发生变化,例如:

代码语言:javascript
复制
http://staging.tassenmagazijn.nl/media/catalog/product/cache/0/image/a94bc919ee025799dd7ec1f1b7884918/1/0/10_vilten_tas_2b_2.jpg

代码语言:javascript
复制
10_vilten_tas_2b_2.jpg
票数 1
EN

Stack Overflow用户

发布于 2015-07-17 08:39:09

这在很大程度上将取决于您的shell以及它可以用于read的工具,在本例中是分隔符';'。如果您有BASH或一些类似的shell,那么使用子字符串删除解决方案就很简单了。

代码语言:javascript
复制
#!/bin/bash

while read -d ';' -r line; do
    ((${#line} >= 12)) && [[ $line =~ http ]] &&
    printf "%s\n" ${line##*/}
done < "$1"

如果您仅限于POSIX,那么解决方案需要更多的工作,并且一旦sed被隔离,您将继续解析它。将每个URL从包含多个URL的用分号分隔的行中分离是有点棘手的。在POSIX中,您基本上必须在每一行中输入蠕虫,一次读取一个字符(大型文件的读取速度很慢),下面将验证每一行在开始时都包含http

代码语言:javascript
复制
#!/bin/sh

url=""
while read -r line; do 
    len=`expr length "$line"`
    urlstart=`expr index "$line" "h"`
    line=`expr substr "$line" "$urlstart" "$len"`
    while [ $len -gt 0 ]; do 

        c=`expr substr "$line" 1 1`

        if [ x$c = 'x;' ]; then
            if [ `expr length "$url"` -ge 12 ]; then
                # printf "url: %s\n" "$url"
                ulen=`expr length "$url"`
                urlstart=`expr index "$url" "h"`

                if [  $urlstart -gt 0 ]; then

                    if [ $urlstart -gt 1 ]; then
                        url=`expr substr "$url" "$urlstart" "$ulen"`
                    fi
                    urlflag=0

                    while [ `expr substr "$url" 1 4` != http ]; do
                        url=`expr substr "$url" 2 "$ulen"`
                        urlstart=`expr index "$url" "h"`
                        if [ "$urlstart" -eq 0 ]; then
                            urlflag=1
                            break
                        fi
                        url=`expr substr "$url" "$urlstart" "$ulen"`
                        ulen=`expr length "$url"`
                        if [ $ulen -le 12 ]; then
                            urlflag=1
                            break
                        fi
                    done

                    if [ $urlflag -ne 1 ]; then
                        if [ `expr substr "$url" 1 4` = http ]; then 
                            echo "$url" | sed -e 's/http.*\///'
                        fi
                    fi

                fi
            fi
            url=""

        else
            url="$url$c"
        fi
        line=`expr substr "$line" 2 "$len"`
        len=`expr length "$line"`
    done
done <"$1"

如果您能够确保URL只比某些常量长的行长,那么通过不搜索和验证每个包含http的字符串,可以显着地提高POSIX解决方案的性能。要根据长度解析URL,可以使用类似于以下内容的内容:

代码语言:javascript
复制
#!/bin/sh

while read -r line; do 

    printf "\n%s\n\n" "$line"
    len=`expr length "$line"`
    sidx=`expr index "$line" ";"`

    while [ $len -gt 0 ]; do 

        if [ $sidx -gt 0 ]; then 
            let end=sidx-1
            str=`expr substr "$line" 1 "$end"`
            slen=`expr length "$str"`
            if [ $slen -gt 12 ]; then
                echo "$str" | sed -e 's/^.*\///'
            fi
        else
            if [ $len -gt 12 ]; then
                echo "$line" | sed -e 's/^.*\///'
            fi
            break;
        fi

        let start=sidx+1
        line=`expr substr "$line" "$start" "$len"`

        len=`expr length "$line"`
        sidx=`expr index "$line" ";"`

    done

done <"$1"

12的长度只是作为jpeg文件(例如http://a.jpg )的最短URL计算出来的。

在所有情况下,您给出的示例文件的结果都是相同的:

输入

代码语言:javascript
复制
$ cat dat/httppaths.txt
;56.95;Vilten tas met twee hanen in kleur http://staging.tassenmagazijn.nl/\
media/catalog/product/cache/0/image/a94bc919ee025799dd7ec1f1b7884918/1/0/10_vilte\
n_tas_2b_2.jpg;http://staging.tassenmagazijn.nl/media/catalog/product/2/0/10_vilte\
n_tas_2c_1.jpg;http://staging.tassenmagazijn.nl/media/catalog/product/2/0/10_vilte\
n_tas_2d_1.jpg;;;;;;;Fixed;New;Send;True;

使用/输出

代码语言:javascript
复制
$ sh parsehttppath.sh dat/httppaths.txt
10_vilten_tas_2b_2.jpg
10_vilten_tas_2c_1.jpg
10_vilten_tas_2d_1.jpg
票数 0
EN

Stack Overflow用户

发布于 2015-07-17 09:11:35

试着做这样的事情:

代码语言:javascript
复制
cat file.txt | grep jpg | grep http | grep "/" | awk -F "/" '{ for(i = 1; i <= NF; i++) if ($i ~ "jpg") {print $i} }' | awk -F ";" '{print $1}' | xargs
  • 我对jpg后缀做了一些假设,还有http.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31471534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档