我的输入文件是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
有人能帮我吗?
1条答案
按热度按时间vqlkdk9b1#
代码中的问题在于循环中
cut
命令的使用。cut
命令在每次迭代中单独执行,这会导致输出逐行追加到文件中。要实现水平追加列的所需输出,需要修改代码以在单个迭代中处理列。以下是解决此问题的代码的更新版本:
在此更新的代码中,
cut
命令用于从input_file.csv
中提取所需的列($i
和$testvar
)。然后,使用paste
命令,使用逗号作为分隔符(-sd ','
)水平连接提取的列。然后使用>>
运算符将连接的列追加到output.csv
文件。通过使用这种方法,您可以获得所需的输出格式,其中列在每次迭代中彼此相邻地追加。