我编写了一个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
第六行和第七行是元素符号和原子数。我想获取一个字符串= 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] +”} for awk不起作用。
哪里错了?
谢谢...
最佳答案
使用awk:
awk 'NR==6{a=$1;b=$2}NR==7{print a $1 b $2}' file
C24H7