我有一个像这样的 .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”?
编辑:上面的列名称只是一个示例。我更喜欢使用提取列名称标题的命令,因为我的文件实际上使用不同的单词作为标题。
我有一个如下所示的“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