我有一个看起来像的文本文件
file1 value1
file1 value2
file2 value1
file2 value2
file2 value3
我想将文本文件拆分为多个文件,其中column1和column2的文件名作为文件的内容,如
file1_new.txt
value1
value2
file2_new.txt
value1
value2
value3
我尝试使用以下脚本,但这不起作用。有人可以帮我重写脚本吗?
cat input.txt | while read file value; do
echo "$value" > "$file"_new.txt
done
使用>>
而不是>
来追加。
不要覆盖该文件。改为附加到文件:
cat input.txt | while read file value; do
echo "$value" >> "$file"_new.txt
done
请注意我从>
到>>
的更改,这意味着“附加到文件”。
使用>
时,如果目标文件存在,则在当前命令将其输出写入文件之前将清除其内容,因此文件最终包含最后一个值。当您使用>>
时,文件的内容将不会被清除,新的输出将附加到文件的末尾,这正是您想要的。
你可以使用这个awk:
$ awk '{print $2 > $1 "_new.txt"}' file
因为它会打开所有文件,你可能会用完fds。在这种情况下,你应该在每次写入后close()
文件,并将>
更改为>>
以附加:
$ awk '{print $2 > $1 "_new.txt"; close($1 "_new.txt")}' file
当然,如果file
在$1
上排序,一旦它改变,你只需要输出文件close()
。
qazxsw poi每次都会创建一个新的$ file new.text,将$ value写入其中。
您想使用echo "$value" > "$file"_new.txt
运算符将每个$值附加到$ file。
见>>