shell 向同一文件添加多列

wlsrxk51  于 2023-06-06  发布在  Shell
关注(0)|答案(1)|浏览(265)

我的输入文件是input_file.csv,数据如下:

Fname,Lname,Age,Gender,Address,Age,Gender,Address  
ABC,EFG,33,M,India,Age,Gender,Address  
PQR,XYZ,30,F,Canada,Age,Gender,Address

我想将列6和列3动态添加到一个新文件output.csv中。所以我尝试下面的代码:

final_col_count=8   -- total number of columns
inp_dummy_col_count=6   --- total number of varying columns

for ((i=3;i\<=final_col_count;i++))
do
testvar=`expr $i + $inp_dummy_col_count`  
cat input_file.csv | cut -d, -f$testvar \>\> output.csv  
cat input_file.csv | cut -d, -f$i \>\> output.csv
done

我得到的输出如下:

Age
Age  
Age
Age
33
30

而我想要的输出如下:

Age,Age
Age,33  
Age,30

有人能帮我吗?

vqlkdk9b

vqlkdk9b1#

代码中的问题在于循环中cut命令的使用。cut命令在每次迭代中单独执行,这会导致输出逐行追加到文件中。要实现水平追加列的所需输出,需要修改代码以在单个迭代中处理列。
以下是解决此问题的代码的更新版本:

#!/bin/bash

final_col_count=8   # total number of columns
inp_dummy_col_count=6   # total number of varying columns

for ((i=3; i<=final_col_count; i++))
do
  testvar=$((i + inp_dummy_col_count))
  cut -d, -f$i,input_file.csv | paste -sd ',' - >> output.csv
  cut -d, -f$testvar,input_file.csv | paste -sd ',' - >> output.csv
done

在此更新的代码中,cut命令用于从input_file.csv中提取所需的列($i$testvar)。然后,使用paste命令,使用逗号作为分隔符(-sd ',')水平连接提取的列。然后使用>>运算符将连接的列追加到output.csv文件。
通过使用这种方法,您可以获得所需的输出格式,其中列在每次迭代中彼此相邻地追加。

相关问题