大佬教程收集整理的这篇文章主要介绍了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.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 '
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
以上是大佬教程为你收集整理的awk 提取一列并输出以列标题命名的文件全部内容,希望文章能够帮你解决awk 提取一列并输出以列标题命名的文件所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。