我不是一个经验丰富的 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_IN1
file1LEV_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