如何在字符串

时间:2016-05-14 01:32:03

标签: bash

我在一个文件中有三列数据,即

  0.464980006         0.237939999         0.000000000
  0.464980006         0.737940013         0.000000000
  0.964980006         0.237939999         0.000000000
  0.964980006         0.737940013         0.000000000
  0.298310012         0.404610008         0.068700001
  0.298310012         0.904609978         0.068700001
  0.798309982         0.404610008         0.068700001
  0.798309982         0.904609978         0.068700001

现在我想将F F F追加到每一行的末尾,我应该如何实现呢?

这是我的代码:

#!/bin/bash
tail -n +9 POSCAR | head -n 24 | sort -k3 | head -8 > o-bot-layer
tail -n +9 POSCAR | head -n 24 | sort -k3 | tail -16 > o-sur-layer
tail -n +33 POSCAR | sort -k3 | head -4 > ce-bot-layer
tail -n +33 POSCAR | sort -k3 | tail -8 > ce-sur-layer

cat o-bot-layer | awk '{print $1,$2,$3,"F F F"}' > o-bot-layer

head -n 8 POSCAR > lat

cat o-sur-layer >> lat
cat o-bot-layer >> lat
cat ce-sur-layer >> lat
cat ce-bot-layer >> lat
mv lat pos.str
rm o-sur-layer o-bot-layer ce-sur-layer ce-bot-layer

它不起作用。我在其他人的帖子中尝试了sed的/ $'和awk'{print $ 0,“”}',奇怪的是我只是将它附加到行的开头而不是结尾。

这样的事情:

 F F F0002 0.571280003 0.137400001
  F F F0017 0.071280003 0.137400001
  F F F0017 0.571280003 0.137400001
  F F F0006 0.237939999 0.206110001
  F F F0006 0.737940013 0.206110001
  F F F0006 0.237939999 0.206110001
  F F F0006 0.737940013 0.206110001
  F F F0012 0.404610008 0.274809986
  F F F0012 0.904609978 0.274809986
  F F F9982 0.404610008 0.274809986
  F F F9982 0.904609978 0.274809986
  F F F0002 0.071280003 0.343510002
  F F F0002 0.571280003 0.343510002
  F F F0017 0.071280003 0.343510002
  F F F0017 0.571280003 0.343510002
  F F F0006 0.237939999 0.000000000
  F F F0006 0.737940013 0.000000000
  F F F0006 0.237939999 0.000000000
  F F F0006 0.737940013 0.000000000
  F F F0012 0.404610008 0.068700001
  F F F0012 0.904609978 0.068700001
  F F F9982 0.404610008 0.068700001
  F F F9982 0.904609978 0.068700001
  F F F0012 0.404610008 0.171749994
  F F F0012 0.904609978 0.171749994
  F F F9982 0.404610008 0.171749994

我怀疑我的文件格式中有一些隐藏的东西,比如\ n在每行的开头,所以sed $ s会认为行的开头是行尾。我不确定......

谢谢!

2 个答案:

答案 0 :(得分:1)

哦,天哪。我懂了。

我收到的POSCAR文件很可疑。

我猜这是来自windows,所以它包含一些dos格式,可能会在unix环境中产生误导。

我首先使用

进行转换
dos2unix POSCAR

然后运行我的代码,现在一切正常,就像其他人的帖子一样!

任何大师都可以进一步解释这种肮脏的dos格式吗?

答案 1 :(得分:0)

  • 首先是POSCAR文件的来源是什么
  • 如果您复制粘贴,则可能存在不可显示的字符
  • 我试图浏览并发现,可能你会帮助你找到消息来源

    yourElement.on("click", function(){
      d3.select(this).attr("transform", "translate(0, " + someValue + ")");
    });
    

任何方式看看这是否有帮助

Unicode Character 'START OF TEXT' (U+0002)
Unicode Character 'DEVICE CONTROL TWO' (U+0012)
Unicode Character 'END OF TRANSMISSION BLOCK' (U+0017)