Text-Processing

如何調整一行中的第 n 個數字?

  • October 17, 2019

文件內容:

RANDOM TEXT    num1=400    num2=15    RANDOM TEXT
RANDOM TEXT    num1=300    num2=10    RANDOM TEXT
RANDOM TEXT    num1=200    num2=5    RANDOM TEXT

我想為每行的每個 num2 減去 5,如下所示:

RANDOM TEXT    num1=400    num2=10    RANDOM TEXT
RANDOM TEXT    num1=300    num2=5    RANDOM TEXT
RANDOM TEXT    num1=200    num2=0    RANDOM TEXT

純 bash 是首選,但如果另一個 GNU 工具做得更好,那也沒什麼大不了的。

使用awk

awk '{ for (i=1;i<=NF;i++) { if ($i ~ /num2=/) {sub(/num2=/, "", $i); $i="num2="$i-5; print} } }' file

這將遍歷每一行的每一列,尋找包含num2=. 當它找到該列時,它將:

  1. 刪除num2=-sub(/num2=/, "", $i)
  2. 將該列重新定義為num2={oldnum-5}-$i="num2="$i-5
  3. 列印行 -print

perl:

perl -pe 's/(?<=num2=)(\d+)/$1 - 5/e' file

要將內容儲存回文件中:

perl -i -pe ...

引用自:https://unix.stackexchange.com/questions/547119