Bash循环逐行读取并逐行创建索引

时间:2017-03-17 15:02:56

标签: bash

我正在尝试在bash文件中执行以下操作:

mybash.sh myinputfile.txt myloopfile.csv

创建 for循环,逐行读取 myloopfile.csv ,然后创建一个文件夹,将行号作为前缀为&#的文件夹名称34;文件夹",例如folder1,folder2 ...... 然后在此folder$i内创建一个名为输入的文件夹,另一个名为输出。 将line$i内容写入名为 myline.txt 的文件中,并将此文件放入folder$i/input内 并将我将作为参数传递的文件 myinputfile.txt 复制到folder$i/input内的bash文件中。

然后运行我的个人脚本,它带有两个参数:

python myscript.py -i ./folder$i/input -o ./folder$i/output

并完成了!

myfile.csv

101,1001,10012,100121
102,101213,11122.1,12.15
103,122.15,155.2,1515.54
104,154.4,4551.1,454

我现在拥有的东西:

#!/bin/bash

while IFS='' read -r line || [[ -n "$line" ]]; do
    mkdir ./folder$line
    echo "$line"  >> Folder$line/input/myline.txt;
    cp myinputfile.txt Folder$line/input
    python myscript.py -i ./folder$i/input -o ./folder$i/output

done < "$1"
问题是我无法获取行索引将其作为后缀传递给文件夹名称,所以我目前得到行内容。我不知道如何阅读这两个文件从我传递给mybash.sh的论据。

1 个答案:

答案 0 :(得分:3)

使用计数器跟踪行号:

#!/bin/bash
input_file=$1
csv_file=$2

count=1
while IFS= read -r line || [[ -n "$line" ]]; do
  input_dir="./folder$count/input"
  output_dir="./folder$count/output"
  mkdir -p "$input_dir" "$output_dir"
  printf '%s\n' "$line" > "$input_dir/myline.txt"
  cp "$input_file" "$input_dir"

  python myscript.py -i "$input_dir" -o "$output_dir"
  ((count++))
done < "$csv_file"