运行数学,忽略非数字值

时间:2016-01-20 02:52:04

标签: bash

我正在尝试对txt文件的第二列进行一些数学计算,但有些行不是数字,我只想操作有数字的行。并保持其他行不变

txt文件如下

aaaaa 
1 2
3 4

我该怎么做?

2 个答案:

答案 0 :(得分:1)

在任何不包含任何字母内容的行中加倍第二列可能看起来有点像本机bash中的以下内容:

#!/bin/bash

# iterate over lines in input file
while IFS= read -r line; do
  if [[ $line = *[[:alpha:]]* ]]; then
    # line contains letters; emit unmodified
    printf '%s\n' "$line"
  else
    # break into a variable for the first word, one for the second, one for the rest
    read -r first second rest <<<"$line"

    if [[ $second ]]; then
      # we extracted a second word: emit it, doubled, between the first word and the rest
      printf '%s\n' "$first $(( second * 2 )) $rest"
    else
      # no second word: just emit the whole line unmodified
      printf '%s\n' "$line"
    fi
  fi
done

这从stdin读取并写入stdout,因此用法类似于:

./yourscript <infile >outfile

答案 1 :(得分:0)

非常感谢,这是我第二次使用这个网站,我发现它非常有用,可以很快得到答案

我也在下面找到答案

#!/bin/bash
FILE=$1

while read f1 f2 ;do 

if[[$f1 != *[!0-9]*]];then 
  f2=`echo "$f2 -1"|bc` ;
  echo "$f1 $f2"
else
  echo "$f1 $f2"
fi

完成&LT; %FILE