我有一个文件,其中数据以以下格式:
Cl -2.30000000 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
MN 0.0000000 0.00000000000000000000000
CL 2.30000000 0.0000000000000000000
...
等等。我需要逐行提取此数据并将其写入另一个文件。我正在使用以下代码来测试我在做什么:
ABC=$(sed -n "6 s/[A-Z]//p" $XYZ)
echo $ABC
其中xyz是文件名。但是,我获得的输出如下(例如(:
0.00000000 0.00000000 -2.20000000
也就是说,一开始的字母没有打印。有人知道为什么会发生这种情况,以及如何解决这个问题?谢谢。
好吧,我不知道您到底想实现什么。假设数据文件是data.txt,而目标是appendto.txt
如果您需要读取一个文件的数据并将其附加到另一个文件。
cat data.txt >> appendto.txt
如果您需要更改数据列的顺序。
sed -n 's/^([A-Z].*) ([-0-9].*.[0-9].*) ([-0-9].*.[0-9].*) ([-0-9].*.[0-9].*)$/2 3 4 1/p' data.txt >> appendto.txt
如果您想在脚本中使用它来进一步操纵数据。
cat data.txt | while read line
do
col1=$(echo $line | cut -d ' ' -f 1)
col2=$(echo $line | cut -d ' ' -f 2)
col3=$(echo $line | cut -d ' ' -f 3)
col4=$(echo $line | cut -d ' ' -f 4)
# Manipulte data
# And append it
echo $col2 $col4 $col1 $col3 >> appendto.txt
done
确保您也可以使用SED,但是在此脚本中它有点开销。
cat data.txt | while read line
do
col1=$(echo $line | sed -n 's/^([A-Z].*) .*$/1/p')
col2=$(echo $line | sed -n 's/^[A-Z].* ([-0-9].*.[0-9].*) .*$/1/p')
col3=$(echo $line | sed -n 's/^[A-Z].* [-0-9].*.[0-9].* ([-0-9].*.[0-9].*) .*$/1/p')
col4=$(echo $line | sed -n 's/^[A-Z].* [-0-9].*.[0-9].* [-0-9].*.[0-9].* ([-0-9].*.[0-9].*)$/1/p')
# Manipulte data
# And append it
echo $col2 $col4 $col1 $col3 >> appendto.txt
done