我有一个包含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上做得更好更快吗?
答案 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
我还没有测试过它的性能,但是我认为它应该不会那么糟糕。