在处理最后一栏时,我的AWK出了什么问题?

时间:2016-04-14 06:28:01

标签: linux awk

我编写了一个shell脚本来从名为" POSCAR"的文件中抽象数据。它是在win10系统中生成的。它看起来像这样:

System
1.0
       23.0000000000         0.0000000000         0.0000000000
        0.0000000000        23.0000000000         0.0000000000
        0.0000000000         0.0000000000        17.0000000000
    C    H
   24    7
Direct

第6行和第7行是元素符号和原子数。我想得到一个字符串= C24H7。所以我写了这样的脚本:

#!/bin/bash
path=$PWD
fin="POSCAR"
e_tot=`sed -n 6p $fin   |awk '{printf "%.1d", NF }'`
echo There are $e_tot columns.
ele=""
for ii in $(seq 1 1 $e_tot)
do
  echo $ii
  aa=`sed -n 6p $fin |awk -v ll=$ii '{printf "%s", $ll}'`
  mm=`sed -n 7p $fin |awk -v ll=$ii '{printf "%d", $ll}'`
  col=$aa$mm
  ele=$ele$col
done

输出用于最后一列。我可以得到C24H,但是" 7"迷路了。或者它只是导出到下一行。 我认为它可能与行的最后一个字符有关,它是由Windows生成的,而不是Linux认可的,我不知道是什么。 对于awk,BEGIN {FS =" [\ n \ t] +"}不起作用。 哪里错了? 谢谢......

1 个答案:

答案 0 :(得分:2)

使用awk:

awk 'NR==6{a=$1;b=$2}NR==7{print a $1 b $2}' file
C24H7