我想在现有文件的每一行的末尾添加一个文本。此文本必须从文件的第一行追加到最后一行。
问题是,我将文件内容作为输入传递给循环,并且必须将其输出附加到同一文件中。我无法弄清楚它的逻辑。
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。我需要将这些值附加到每行的末尾
有人可以指导我这样做,以便我可以改变上面的代码以获得如上所述的意图输出。
谢谢!
答案 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