使用 shell 脚本划分特定的列号

使用 shell 脚本划分特定的列号

我有一个文本文件,如下所示:

# MarkerIndex 
# TiltAngle (degrees)
# PositionX (px)
# PositionY (px)
# 
  0  -62.450  1526.64  1205.00
  0  -60.460  1507.84  1205.36
  8   15.890  1535.96  2281.44
  8   17.890  1538.96  2281.40
  8   19.890  1542.60  2282.08
  8   21.900  1545.96  2282.32
  8   23.900  1550.64  2282.40
  8   25.900  1554.52  2281.68
  8   28.000  1559.36  2281.88
  8   30.090  1563.56  2281.32
  8   32.190  1568.64  2280.80
  8   34.280  1573.12  2280.56

我想保持前两列不变,第三列和第四列除以 4。我该怎么做?

答案1

您可以使用以下命令来完成此任务awk这是一个标准的 bash 工具,用于文本处理、文件算术等。

我看到输入文件发生了变化,所以让我们看看printf,看看这里如何定义参数的格式。也NR<=5适用于前 5 行,保持不变并作为标题打印

awk 'NR<=5 {print; next} {$3=$3/4; $4=$4/4}
    {printf "%3s %8.3f %8.2f %8.2f\n", $1, $2, $3, $4}' file

输出:

# MarkerIndex 
# TiltAngle (degrees)
# PositionX (px)
# PositionY (px)
# 
  0  -62.450   381.66   301.25
  0  -60.460   376.96   301.34
  8   15.890   383.99   570.36
  8   17.890   384.74   570.35
  8   19.890   385.65   570.52
  8   21.900   386.49   570.58
  8   23.900   387.66   570.60
  8   25.900   388.63   570.42
  8   28.000   389.84   570.47
  8   30.090   390.89   570.33
  8   32.190   392.16   570.20
  8   34.280   393.28   570.14

答案2

下面的 bash 脚本将按原样粘贴前两列,并将接下来的 2 列除以 4 粘贴到 output.txt 文件中。

#!/bin/bash

file="/path/file.txt"
while IFS= read -r line
do
col1=$(echo "$line" | awk {'print $1'})
col2=$(echo "$line" | awk {'print $2'})
col3=$(echo "$line" | awk {'print($3/4)'})
col4=$(echo "$line" | awk {'print($4/4)'})
echo "$col1 $col2 $col3 $col4" >> output.txt
done < "$file"

我希望这就是你想要的。

相关内容