微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决awk 提取一列并输出以列标题命名的文件

我有一个这样的 .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 desktop 中的示例编写。

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.txtcol3.reform.txt 等等...

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

col2.reform.txt

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

cat col2.reform.txt
col1 col2
1 3
2 4
3 1
5 3
,
$ awk '
    NR==1 { split($0,hdrs) }
    {
        for (i=2; i<=NF; i++) {
            out = hdrs[i]".reform.txt"
            if (FNR==1) {
                printf "" " > " out    # to erase exiting file contents if any
            }
            print $1,$i " >> " out
            close(out)
        }
    }
' file
 > col2.reform.txtcol1 col2 >> col2.reform.txt
 > col3.reform.txtcol1 col3 >> col3.reform.txt
 > col4.reform.txtcol1 col4 >> col4.reform.txt
1 3 >> col2.reform.txt
1 4 >> col3.reform.txt
1 A >> col4.reform.txt
2 4 >> col2.reform.txt
2 6 >> col3.reform.txt
2 B >> col4.reform.txt
3 1 >> col2.reform.txt
3 5 >> col3.reform.txt
3 D >> col4.reform.txt
5 3 >> col2.reform.txt
5 7 >> col3.reform.txt
5 F >> col4.reform.txt

当您完成测试并想要实际生成输出文件时,只需将 " > " 更改为 > 并将 " >> " 更改为 >>

,

这里有一个类似的...

$ awk 'NR==1 {n=split($0,h)} 
             {for(i=2;i<=n;i++) print $1,$i > (h[i]".reform.txt")}' file

==> col2.reform.txt <==
col1 col2
1 3
2 4
3 1
5 3

==> col3.reform.txt <==
col1 col3
1 4
2 6
3 5
5 7

==> col4.reform.txt <==
col1 col4
1 A
2 B
3 D
5 F

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?