将新列添加到CSV文件

时间:2018-10-03 10:02:34

标签: bash awk sed

我有一个包含5列的文件,并且行数有所不同。 我想追加从变量填充的三列。变量值保持不变。

目前,我以以下方式进行操作:

#!/bin/bash

newvar1="abcd6"
newvar2="abcd7"
newvar3="abcd8"

rm -rf *.txtyy
number_of_lines=`wc -l smallsample.txt|awk {'print $1'}`
for i in `seq $number_of_lines`; do
echo $newvar1 >> paste1.txtyy
echo $newvar2 >> paste2.txtyy
echo $newvar3 >> paste3.txtyy
done

paste -d "," smallsample.txt paste1.txtyy paste2.txtyy paste3.txtyy

脚本输出为:

# bash paste.sh
abcd1,abcd2,abcd3,abcd4,abcd5,abcd6,abcd7,abcd8
abcd1,abcd2,abcd3,abcd4,abcd5,abcd6,abcd7,abcd8
abcd1,abcd2,abcd3,abcd4,abcd5,abcd6,abcd7,abcd8
abcd1,abcd2,abcd3,abcd4,abcd5,abcd6,abcd7,abcd8

我的机器上1,000,000行的执行时间是:

time bash paste.sh

real    0m24.257s
user    0m14.668s
sys     0m9.380s

输入:

abcd1,abcd2,abcd3,abcd4,abcd5
abcd1,abcd2,abcd3,abcd4,abcd5
abcd1,abcd2,abcd3,abcd4,abcd5
abcd1,abcd2,abcd3,abcd4,abcd5
...
abcd1,abcd2,abcd3,abcd4,abcd5

必填输出:

abcd1,abcd2,abcd3,abcd4,abcd5,abcd6,abcd7,abcd8
abcd1,abcd2,abcd3,abcd4,abcd5,abcd6,abcd7,abcd8
abcd1,abcd2,abcd3,abcd4,abcd5,abcd6,abcd7,abcd8
abcd1,abcd2,abcd3,abcd4,abcd5,abcd6,abcd7,abcd8
...
abcd1,abcd2,abcd3,abcd4,abcd5,abcd6,abcd7,abcd8

我相信我在这里所做的事情太过夸张,浪费了可用资源。 我可以使用该发行版中的可用工具以某种方式在Debian 9.4上做得更好更快吗?

2 个答案:

答案 0 :(得分:4)

能否请您尝试以下。这样会将输出保存到Input_file本身。

=A1*B1

答案 1 :(得分:2)

我认为您可以尝试这样的事情

#!/bin/bash

newvar1="abcd6"
newvar2="abcd7"
newvar3="abcd8"

awk -v var1="$newvar1" -v var2="$newvar2" -v var3="$newvar3" -vOFS="," '{print $0,var1,var2,var3}' smallsample.txt > outputfile.txt

我还没有测试过它的性能,但是我认为它应该不会那么糟糕。