gpt4 book ai didi

awk 提取列并输出以列标题命名的文件

转载 作者:行者123 更新时间:2023-12-05 08:48:30 26 4
gpt4 key购买 nike

我有一个这样的 .txt 文件:

col1    col2    col3    col4
1 3 4 A
2 4 6 B
3 1 5 D
5 3 7 F

我想提取第 1 列之后的每一列 (i),并将第 1 列和第 i 列输出到一个以第 i 列标题命名的新文件中。

这意味着我将拥有三个分别名为“col2.reform.txt”、“col3.reform.txt”和“col4.reform.txt”的输出文件。

例如,输出“col2.reform.txt”文件将如下所示:

col1    col2
1 3
2 4
3 1
5 3

我试过这样的代码:

awk '{for (i=1; i <=NF; i++) print $1"\t"$i > ("{awk 'NR==1' $i}"".reform.txt")}' inputfile

显然“{awk 'NR==1' $i}”部分不起作用,我得到了一个名为 {awk 'NR==1' $i}.reform.txt 的文件。

如何正确获取文件名?谢谢!

PS:如何删除终端中的文件“{awk 'NR==1' $i}.reform.txt”?

编辑:上面的列名只是一个例子。我更愿意使用提取列名标题的命令,因为我的文件实际上使用不同的词作为标题。

最佳答案

根据您显示的示例,您能否尝试以下操作。用 GNU awk 中显示的示例编写。

awk '
FNR==1{
for(i=1;i<=NF;i++){
heading[i]=$i
}
next
}
{
for(i=2;i<=NF;i++){
close(outFile)
outFile="col"i".reform.txt"
if(!indVal[i]++){ print heading[1],heading[i] > (outFile) }
print $1,$i >> (outFile)
}
}
' Input_file

输出文件将使用名称创建,例如--> col2.reform.txt, col3.reform.txt, col4.reform.txt等等...

col2.reform.txt 内容示例如下:

cat col2.reform.txt
col1 col2
1 3
2 4
3 1
5 3

说明: 为以上添加详细说明。

awk '                             ##Starting awk program from here.
FNR==1{ ##Checking condition if this is first line then do following.
for(i=1;i<=NF;i++){ ##Traversing through all fields of current line.
heading[i]=$i ##Creating heading array with index of i and value of current field.
}
next ##next will skip all further statements from here.
}
{
for(i=2;i<=NF;i++){ ##Traversing from 2nd field to till last field of all rest of lines.
close(outFile) ##Closing outFile to avoid too many opened files error.
outFile="col"i".reform.txt" ##Creating outFile which has output file name in it.
if(!indVal[i]++){ print heading[1],heading[i] > (outFile) }
##Checking condition if i is NOT present in indVal then print 1st element of heading and current element of heading into outFile.
print $1,$i >> (outFile) ##Printing 1st field and current field values to output file here.
}
}
' Input_file ##Mentioning Input_file name here.

关于awk 提取列并输出以列标题命名的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65941781/

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