首页 > 解决方案 > 从 Bash 的 for 循环中写入文件

问题描述

假设我有以下 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循环的所有值创建空文件,并将文件的实际内容打印到控制台。

有没有办法将输出重定向到文件?

标签: bashfor-loopcat

解决方案


简单地

#!/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

截屏

小丑


推荐阅读