使用 awk 从单独的文件中选择列数据

使用 awk 从单独的文件中选择列数据

我不是一个经验丰富的 Linux 用户。我试图从 2 个单独的文件中选择列数据并使用 awk 写入第三个文件。我尝试将文件粘贴在一起,即粘贴 file1 file2,然后 awk,但数据附加在下一行(交替)。

数据如下:

文件1

HZ880   0.00 

HAM86   1.13 

HAM40   1.60 

文件2

HZ880  -31.816826 115.757963   35.8909  0.0170  -.0170

HAM86  -31.824923 115.761507   33.6108  0.0165  -.0165

HAM40  -31.828528 115.762380   38.8434  0.0163  -.0163

如何使用column2(文件1)和column4(文件2)创建新文件?

我已经尝试过以下方法:

paste ${LEV_IN1} ${LEV_IN2} | awk '{print $2,$4}' > ${TEMP2}

其中LEV_IN1file1LEV_IN2是 file2

我究竟做错了什么?

答案1

当您首先依次给出文件名时,它会计算 file1 中的所有列,然后从下一个数字开始计数到 ​​file2。这意味着它计算 file1 的 2 列和 file2 的起始列 3,4,5.... 等等。

要获取 file2 的第 4 列,您需要写入,$6因为命令在 file2 中从 3 开始计数。

这将为您提供所需的输出($6如果您想打印 file2 中的任何其他列,请更改为其他数字):

paste file1 file2 | awk '{print $2 " " $6}' > outputfile.txt

另一种方式(这里$4指的是 file2 的第 4 列):

paste <(awk '{print $2}' file1) <(awk '{print $4}' file2) > outputfile.txt

输出:

0.00    35.8909

1.13    33.6108

1.60    38.8434

以下是纯awk解决方案:

awk 'NR==FNR{a[NR]=$2; next} {print a[FNR], $4}' file1 file2 > outputfile.txt

答案2

awk任务中不需要使用

join --nocheck-order -o 1.2,2.4 file1 file2

或者

paste file1 file2 | tr -s ' ' '\t' | cut -f2,6

相关内容