gpt4 book ai didi

csv - 如何从所有 csv 文件中添加第 n 列并存储在另一个 csv 文件中(标题是该列来自的文件名)?

转载 作者:行者123 更新时间:2023-12-04 08:29:08 25 4
gpt4 key购买 nike

我有多个 .csv 文件,我想从每个文件中提取一个特定的列。让我们说第 5 列。我想将该列添加到一个 csv 文件中,然后从每个连续的文件中将一个新列附加到它上面。我可以使用从其他人那里获取的以下代码来做到这一点:

awk '{_[FNR]=(_[FNR] OFS $1)}END{for (i=1; i<=FNR; i++) {sub(/^ /,"",_[i]); print _[i]}}' input*.csv > output.csv`
当我查看输出文件时,我注意到添加列的顺序不是顺序的。因此,我希望修改代码,以便列的标题是该列来自的文件名。我该怎么做呢?
例如:
input1.csv 可以是:
1,2,3,4,5
6,7,8,9,10
input2.csv 可以是:
11,12,13,14,15
16,17,18,19,20
我希望 output.csv 是:
input1.csv, input2.csv
5,15
10,20
我希望这是有道理的,并提前致谢。

最佳答案

你能不能试试以下。使用 GNU 中显示的样本编写和测试 awk .

awk '
BEGIN{ FS=OFS="," }
FNR==1{
fileName=(fileName?fileName", ":"")FILENAME
}
{
max=(max>FNR?max:FNR)
val[FNR]=(val[FNR] == "" ? "" : val[FNR] OFS) $NF
}
END{
print fileName
for(i=1;i<=max;i++){
print val[i]
}
}
' *.csv > output.csv
显示的示例输出文件名为 output.csv将包含以下内容。
input1.csv, input2.csv
5,15
10,20
说明:为上述添加详细说明。
awk '                                           ##Starting awk program from here.
BEGIN{ FS=OFS="," } ##Starting BEGIN section from here and setting field separator and output field separator as comma here.
FNR==1{ ##If this is first line of all Input_file
fileName=(fileName?fileName", ":"")FILENAME ##Creating fileName which has current Input_file name in it and keep adding it.
}
{
max=(max>FNR?max:FNR) ##Creating max, to get highest number of lines.
val[FNR]=(val[FNR] == "" ? "" : val[FNR] OFS) $NF ##Creating val with index of FNR and keep adding values of last field in it.
}
END{ ##Starting END block of this program from here.
print fileName ##Printing all file names in outputFile.
for(i=1;i<=max;i++){ ##Starting for loop from 1 to max here.
print val[i] ##Printing array val value here.
}
}
' *.csv > output.csv ##Mentioning all *.csv files here.

关于csv - 如何从所有 csv 文件中添加第 n 列并存储在另一个 csv 文件中(标题是该列来自的文件名)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65112059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com