【发布时间】:2016-04-14 06:28:00
【问题描述】:
我编写了一个 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]+"} 不起作用。 哪里错了? 谢谢...
【问题讨论】:
-
结合了 shell、Awk 和
sed的复杂脚本通常可以通过在单个 Awk 脚本中完成而大大简化。 -
你说得对~@tripleee