Unix - 如何让我的shell脚本从命令行处理多个文件?

时间:2016-11-03 20:49:36

标签: shell unix for-loop

我试图修改现有脚本,我必须最多使用三个文本文件并对其进行转换。目前,该脚本仅从一个文件转换文本。这是我现有的脚本:

    if [ $# -eq 1 ]
     then 
      if [ -f $1 ]
       then
    name="My Name"
    echo $name
    date
    starting_data=$1
    sed '/^id/ d' $starting_data > raw_data3
    sed 's/-//g' raw_data3 > raw_data4
    cut -f1 -d, raw_data4 > cutfile1.col1
    cut -f2 -d, raw_data4 > cutfile1.col2
    cut -f3 -d, raw_data4 > cutfile1.col3
    sed 's/$/:/' cutfile1.col2 > last
    sed 's/^ //' last > last2
    sed 's/^ //' cutfile1.col3 > first
    paste -d\ first last2 cutfile1.col1 > final
     cat final
      else
    echo "$1 cannot be found."
    fi
    else
    echo "Please enter a filename."
    fi

1 个答案:

答案 0 :(得分:1)

所有这些临时文件都是不必要的。 可以完成sed和cut所能做的所有操作,因此应该成为你想要的(等待输出字段分隔符问题)

if [ $# -eq 0 ]; then 
    echo "usage: $0 file ..."
    exit 1
fi
for file in "$@"; do
    if ! [ -f "$file" ]; then
        echo "file not found: $file"
        continue
    fi

    name="My Name"
    echo "$name"
    date

    awk -F, -v OFS=" " '
        /^id/ {next}
        {
            gsub(/-/, "")
            sub(/^ /, "", $2)
            sub(/^ /, "", $3)
            print $3, $2 ":", $1
        }
    ' "$file" > final
    cat final
done

请注意我的所有双引号:这些都是必需的。