通过循环将文本从第一行添加到文件的最后一行

时间:2014-09-30 17:53:22

标签: bash shell

我想在现有文件的每一行的末尾添加一个文本。此文本必须从文件的第一行追加到最后一行。

问题是,我将文件内容作为输入传递给循环,并且必须将其输出附加到同一文件中。我无法弄清楚它的逻辑。

FileName:sample

cat sample
Alex, Johston
Samuel, John
Vebron, Justus

以上是文件的内容。现在,在这里,我想用逗号将第一列值(即Alex,Samuel和Verbron)附加到文件的末尾。

我的意图输出:

Alex, Johston,Alex
Samuel, John,Samuel
Vebron, Justus,Vebron

我编写的脚本采用第一列值:

while
read LINE
do
fcol=$(echo $LINE|awk -F, '{ print $1 }')
done < sample

通过上面的循环,变量fcol将存储值 - Alex,Samuel,Vebron。我需要将这些值附加到每行的末尾

有人可以指导我这样做,以便我可以改变上面的代码以获得如上所述的意图输出。

谢谢!

5 个答案:

答案 0 :(得分:3)

awk -F, '{print $0", "$1}' sample

不需要循环,因为awk从输入文件中获取每一行并根据提供的命令对其进行处理。

此处命令为print $0", "$1,其中$0$1附加","

答案 1 :(得分:1)

如果没有某种中间文件(在处理之前不将文件内容存储在内存中),则无法执行此操作。那就像sed -i这样的东西会隐藏你的细节。

awk -F, -v OFS=, '{print $0,$1}' sample > sample.new

sed -i.orig -e 's/^\(.\)\(.*\)/&\1/' sample

答案 2 :(得分:1)

您可以使用awk执行此操作:

cat sample |awk -F "," '{print $0 ", "$1}'

答案 3 :(得分:0)

我的解决方案是

sed -r 's/([^,]*).*/\0, \1/'

答案 4 :(得分:0)

在循环浏览文件之前初始化line_no = 0

在处理每一行之前将line_no递增1:

按照sed命令将$fcol添加到$line_no的末尾 sed -i "$line_no s/$/ ,$fcol/" sample

最终剧本:

line_no=0

while read LINE
do  
line_no=$((line_no+1))
fcol=$(echo $LINE|awk -F, '{ print $1 }')
sed -i "$line_no s/$/ ,$fcol/" sample
done < sample