用于在多个文件中拆分文本文件的Shell脚本

问题描述 投票:0回答:4

我有一个看起来像的文本文件

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
bash shell
4个回答
3
投票

使用>>而不是>来追加。


3
投票

不要覆盖该文件。改为附加到文件:

cat input.txt | while read file value; do 
    echo "$value" >> "$file"_new.txt  
done

请注意我从>>>的更改,这意味着“附加到文件”。

使用>时,如果目标文件存在,则在当前命令将其输出写入文件之前将清除其内容,因此文件最终包含最后一个值。当您使用>>时,文件的内容将不会被清除,新的输出将附加到文件的末尾,这正是您想要的。


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()


0
投票

qazxsw poi每次都会创建一个新的$ file new.text,将$ value写入其中。

您想使用echo "$value" > "$file"_new.txt运算符将每个$值附加到$ file。

>>

© www.soinside.com 2019 - 2024. All rights reserved.