小编zzz*_*zzz的帖子

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

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

col1    col2    col3    col4
1   3   4   A
2   4   6   B
3   1   5   D
5   3   7   F
Run Code Online (Sandbox Code Playgroud)

我想提取第 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
Run Code Online (Sandbox Code Playgroud)

我尝试了这样的代码:

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

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

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

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

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

awk

2
推荐指数
1
解决办法
528
查看次数

awk 选择第 1 列与第 2 列部分匹配的行

我有一个如下所示的“example_file”,

a2022.1 a2022.1 80
a2022.1 a2022.2 90
a2022.1 a2023.1 80
a2022.2 a2022.2 90
a2022.2 a2023.1 40
a2022.3 a2022.1 50
b20225.1 a2022.1 80
Run Code Online (Sandbox Code Playgroud)

我想选择第三列 > 80 并且第一列(点之前)与第二列(点之前)不同的行。

所以期望的结果是

a2022.1 a2023.1 80
b20225.1 a2022.1 80
Run Code Online (Sandbox Code Playgroud)

因此,我已经成功地使用下面的行排除了第三列 <80 以及第一列和第二列相同的行

awk '($3 > 80 && $1!=$2)' example_file
Run Code Online (Sandbox Code Playgroud)

我尝试过awk '($3 > 80 && $1!~$2)' example_file,但它并不排除该行

a2022.1 a2022.2 90
Run Code Online (Sandbox Code Playgroud)

我以为这很容易,但我无法弄清楚。有人可以帮忙吗?谢谢!

awk

2
推荐指数
1
解决办法
81
查看次数

标签 统计

awk ×2