linux - 我的 AWK 在处理最后一列时出了什么问题?

标签 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识别,我不知道是什么。 BEGIN{FS="[\n\t]+"} 对于 awk 不起作用。 哪里错了? 谢谢...

最佳答案

使用 awk:

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

关于linux - 我的 AWK 在处理最后一列时出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36615302/

相关文章:

c++ - 将核心分配给流程的好处

linux - 如何解析 CURL 命令结果的输出?

python - 获取网页的当前版本

linux - 删除用户后,我可以查看该用户上次登录的时间吗?

linux - 如何删除关键字之前及其匹配字符串标记之前的行

linux - 如何在系统中显示有关 DVB(数字视频广播)卡的信息

perl - 在 perl 中使用 bash 命令

linux - 如果 file1 的 B 列 = file2 的 B 列,则将 file1 的 A 列替换为 file2 的 A 列

awk - 在部分字符为希伯来语的文本中,如何使用正则表达式删除逗号前后的空格?

bash - 如何在 Bash 中替换文件每行中除最后 n 个实例之外的所有字符实例