我有一个看起来像
的文本文件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
答案 0 :(得分:3)
使用>>
代替>
进行追加。
答案 1 :(得分:3)
不要覆盖该文件。改为附加到文件:
cat input.txt | while read file value; do
echo "$value" >> "$file"_new.txt
done
请注意我从>
更改为>>
,这意味着“附加到文件”。
当您使用>
时,如果目标文件存在,则在当前命令将其输出写入文件之前将清除其内容,因此文件最终包含最后一个值。当您使用>>
时,文件的内容将不会被清除,新的输出将附加到文件的末尾,这就是您想要的。
答案 2 :(得分:1)
你可以使用这个awk:
$ awk '{print $2 > $1 "_new.txt"}' file
因为它会打开你可能用完fds的所有文件。在这种情况下,您应该在每次撰写后close()
文件,并将>
更改为>>
以便附加:
$ awk '{print $2 > $1 "_new.txt"; close($1 "_new.txt")}' file
当然,如果file
在$1
上排序,则只需更改输出文件close()
。
答案 3 :(得分:0)
echo "$value" > "$file"_new.txt
每次都会创建一个新的$ file_new.txt,并将$ value写入其中。
您希望使用>>
运算符将每个$值附加到$ file。