gpt4 book ai didi

unix - 根据从另一个文件中选择的标题从文件中提取列

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

我有以下问题要在 awk 中解决。我有一个大文本表,逗号分隔,由 100k 行和 5k cols 组成。第一行是标题,第一列是记录 ID。然后我有第二个文本文件,其中包含第一个文件中标题的子集。我想提取第一个文件的所有列,其标题包含在第二个文件中给出的列表中。这是输入和所需输出的示例:

数据文件

   ID, head1, head2, head3, head4  
1, 25.5, 1364.0, 22.5, 13.2
2, 10.1, 215.56, 1.15, 22.2

列表.TXT
head1  
head4

期望的输出:
ID, head1, head4  
1, 25.5, 13.2
2, 10.1, 22.2

任何人都可以就如何在 awk 中或通过 unix 脚本解决此问题给我一些建议?在此先感谢您的帮助!

最佳答案

有一个有用的awk脚本here您可以使用它从 csv 文件中提取特定的列名。

我稍微修改了它,以便它可以从另一个文件中读取列名。将下面的脚本另存为 dataExtractor.sh .

#!/bin/bash

DATAFILE=${1:-data.txt}
COLUMNFILE=${2:-list.txt}

awk -F, -v colsFile="$COLUMNFILE" '
BEGIN {
j=1
while ((getline < colsFile) > 0) {
col[j++] = $1
}
n=j-1;
close(colsFile)
for (i=1; i<=n; i++) s[col[i]]=i
}
NR==1 {
for (f=1; f<=NF; f++)
if ($f in s) c[s[$f]]=f
next
}
{ sep=""
for (f=1; f<=n; f++) {
printf("%c%s",sep,$c[f])
sep=FS
}
print ""
}
' "$DATAFILE"

运行它:
$ cat data.txt
ID,head1,head2,head3,head4
1,25.5,1364.0,22.5,13.2
2,10.1,215.56,1.15,22.2

$ cat list.txt
ID
head1
head4

$ dataExtractor.sh data.txt list.txt
1,25.5,13.2
2,10.1,22.2

关于unix - 根据从另一个文件中选择的标题从文件中提取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11098189/

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