Записать в файл из цикла for в Bash - PullRequest
0 голосов
/ 17 октября 2019

Допустим, у меня есть следующий CSV-файл:

A,1
A,2
B,3
C,4
C,5

И для каждого уникального значения i в первом столбце файла я хочу написать скрипт, который выполняет некоторую обработку с использованием этого значения. Я делаю это следующим образом:

CSVFILE=path/to/csv
VALUES=$(cut -d, -f1 $CSVFILE | sort | uniq)

for i in $VALUES;
do
cat >> file_${i}.sh <<-!
#!/bin/bash
#
# script that takes value I
#
echo "Processing" $i
!
done

Тем не менее, это создает пустые файлы для всех значений i, которые он зацикливает, и выводит фактическое содержимое файлов на консоль.

Есть ли способ вместо этого перенаправить вывод в файлы?

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Просто

#!/bin/bash

FILE=/path/to/file

values=`cat $FILE | awk -F, '{print $1}' | sort | uniq | tr '\n' ' '`

for i in $values; do
 echo "value of i is $i" >> file_$i.sh
done

Снимок экрана

scrot

0 голосов
/ 17 октября 2019

Попробуйте использовать это:

#!/usr/bin/env bash    

csv=/path/to/file

while IFS= read -r i; do
cat >> "file_$i.sh" <<-eof
#!/bin/bash
#
# Script that takes value $i ...
#
eof
done < <(cut -d, -f1 "$csv" | sort -u)
...