我有这样的CSV:
apple,file1.txt
banana,file1.txt
carrot,file2.txt
如何让它将左栏中的所有项目放入以右栏中的项目命名的文件中?例如。 file.txt
将包含此列表:
apple
banana
到目前为止,我有这个:
while read line
do
firstcolumn=$(echo $line | awk -F ",*" '{print $1}')
secondcolumn=$(echo $line | awk -F ",*" '{print $2}')
done < Text/selection.csv
答案 0 :(得分:4)
使用awk
的一种方式:
awk 'BEGIN { FS = "," } { print $1 >> $2 }' infile
答案 1 :(得分:3)
这应该有效 -
awk -F, '{a[$1]=$2} END{for (i in a) print i > a[i]}' file
[jaypal:~/Temp] cat file
apple,file1.txt
banana,file1.txt
carrot,file2.txt
[jaypal:~/Temp] awk -F, '{a[$1]=$2} END{for (i in a) print i > a[i]}' file
[jaypal:~/Temp] ls file*
file file1.txt file2.txt
[jaypal:~/Temp] cat file1.txt
apple
banana
[jaypal:~/Temp] cat file2.txt
carrot
更新:
您也可以这样做 -
awk -F, '{print $1 > $2}' INPUT_FILE
答案 2 :(得分:2)
Pure Bash并假设所有目标文件都是空的或不存在的:
while IFS=',' read item file ; do
echo "$item" >> "$file"
done < "$infile"
答案 3 :(得分:1)
sed喜欢这个东西......
sed "s%\(.*\),\(.*\)%echo \1 >> \2 %" inputfile.txt | sh