【问题标题】:Shell Script for file operation [duplicate]文件操作的Shell脚本[重复]
【发布时间】:2015-07-15 18:22:40
【问题描述】:

我有一个脚本

awk -F, '$4!~/ABCDEF/{print $0}' File_Name.csv>New_File_Name.csv

这是一个脚本,如果第 19 列(csv 中的 D 列)中的单元格包含 ABCDEF,它将删除 csv 文件中的整行。 在这里我手动给出文件名和新文件名。我必须选择一个目录中的所有文件,然后将该文件导出到另一个目录。我该怎么做?

【问题讨论】:

    标签: shell unix


    【解决方案1】:

    您可以在包含所有*csv 文件的目录中运行此脚本:

    for f in *.csv; do
       awk -F, '!($4 ~ /ABCDEF/)' "$f" > "/dest/dir/$f"
    done
    

    【讨论】:

    • 我收到此错误,$ ./Check.sh ./Check.sh: line 1: syntax error near unexpected token $'do\r'' '/Check.sh: line 1: for f in *.csv;做
    • 我正在使用 cygwin,希望这就是问题所在。让我自己在linux环境下试试
    • 在我的虚拟机中遇到问题,会尝试并通知您。
    • 我尝试使用虚拟 CSV,我得到了完美的输出。但是,如果我使用我的原始文件,这些文件是用空数据生成的
    • 这意味着虚拟 CSV 和原始文件有一些不同的结构。如果您在 pastebin.com 上上传原始文件示例,我可以看看。
    【解决方案2】:

    directoryanother_directory 设置适当的值,然后试试这个:

    for fname in $directory/*.csv; do awk -F, '$4!~/ABCDEF/{print $0}' $fname > $another_directory/`basename $fname`; done
    

    你也可以像这样把它放到一个脚本文件中(让它成为script.sh):

    directory=$1
    another_directory=$2
    for fname in $directory/*.csv; do awk -F, '$4!~/ABCDEF/{print $0}' $fname > $another_directory/`basename $fname`; done
    

    使其可执行并像这样调用:

    ./script.sh path_to_source_directory path_to_destination_directory
    

    【讨论】:

    • 第 7 行出现此错误:语法错误:文件意外结束
    • @JimMacaulay 这听起来很奇怪,因为文件中只有 3 行。我创建了两个目录,其中一个为空的*.csv 文件,脚本在该目录上没有任何错误。
    猜你喜欢
    • 2021-02-13
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    相关资源
    最近更新 更多