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

时间:2017-12-19 10:18:38

标签: bash shell

我有一个看起来像

的文本文件
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

4 个答案:

答案 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。

请参阅the bash manual on redirections