在每一行上附加字符串并创建新文件

时间:2014-12-10 05:00:31

标签: bash list-manipulation

我需要在bash上有一些方向,它会获取一个单词列表并将每个单词附加到另一个列表中的单词:

列表1

1
2
3

列表2

!
@
#

新列表 (A)

1!
2!
3!

(B)

1@
2@
3@

(C)

3!
3@
3#

我是如何开始的:(我想我应该注意到我放弃了两个输入文件,而是使用了计数器功能。)

#!/bash/bin
CT=1000 
LIMIT=10000 
while [ "$CT" -lt "$LIMIT" ] 
do 
    echo $CT 
    sed -e 's/$/'$CT'/' -i 'INPUTFILE.txt' 
let "CT +=1" 
done

1 个答案:

答案 0 :(得分:0)

假设您需要编号的输出文件,请尝试在循环内运行计数器。

#!/bin/bash
i=0
while read -r suffix; do
   let i++
   sed "s/$/$suffix/" INPUTFILE.txt >file$i
done <SUFFIXFILE.txt

请注意sed -i将就地操作原始输入文件。你不希望这样;您希望输出在新文件中。所以我们删除-i选项并使用shell的重定向功能来指示发送标准输出的位置。

如果要枚举目标文件名,那就有点棘手了。一种解决方案是将目标文件名添加到后缀文件

!        A
@        B
#        C

然后在循环中读取两个标记:

while read -r suffix outputfile; do
    sed "s/$/$suffix/" INPUTFILE.txt >"$outputfile"
done <SUFFIXLIST.txt

或者如果您想在脚本中嵌入此信息,请使用此处的文档:

while read -r suffix outputfile; do
    sed "s/$/$suffix/" INPUTFILE.txt >"$outputfile"
done <<____HERE
    !        A
    @        B
    #        C
____HERE

(对于算术,唯一的Bash特定构造是let,因此后两个不使用它的脚本可以使用/bin/sh而不是Bash运行。)