如何在 bash 脚本中的 CSV 的下一列中添加文本

How to add a text in next column of CSV in bash script

我有 2 个文件

#cat file.txt
aaa
bbb
ccc

#cat input.txt
191
112
339

我需要

#cat output
aaa,191
bbb,112
ccc,339

我正在努力

while IFS= read -r line
do

cat file.txt | grep "\.$line$" | wc -l >> output.txt
sed -i "1 i\$line"  output.txt

done < input.txt

但它会打印组中每个文件的所有行。

知道如何存档我的结果吗?

如果你是那种喜欢多写而不​​是少行的人,你可以试试这个:

echo -n "" > output.txt
while IFS= read -r line_input && IFS= read -r line_file <&3
  do
    echo "$line_input,$line_file" >> output.txt
done <input.txt 3<file.txt

如果没有,您可以简单地使用@RavinderSingh13 提示 ;-)

更新

有人评论说我提供的解决方案比解决方案慢

paste -d ',' file.txt input.txt

所以我测量了执行时间并得到以下值:

#!/bin/bash
START=$(date +%s.%N)

paste -d ',' file.txt input.txt > output.txt

END=$(date +%s.%N)
DIFF=$(echo "$END - $START" | bc)
echo "$DIFF";

我是最快的:

.004961322

| test 1 |.005088686   |  
| test 2 |.005036140   |  
| test 3 |.005019742   |  
| test 4 |.004961322   |  
| test 5 |.005030747   |  
| test 6 |.004978428   |  

接下来我检查了我提供的解决方案

#!/bin/bash
START=$(date +%s.%N)

echo -n "" > output.txt
while IFS= read -r line_input && IFS= read -r line_file <&3
  do
    echo "$line_input,$line_file" >> output.txt
done <input.txt 3<file.txt

END=$(date +%s.%N)
DIFF=$(echo "$END - $START" | bc)
echo "$DIFF";

我得到了

.002386748

| test 1 |.003516318   |  
| test 2 |.003538960   |  
| test 3 |.002386748   |  
| test 4 |.002584314   |  
| test 5 |.003461923   |  
| test 6 |.003619142   |

所以我的解决方案稍微长了一点,但比使用 paste 更快。
测试是在同一系统上 运行。