shell 从列表文件[重复]

pxiryf3j  于 2023-01-13  发布在  Shell
关注(0)|答案(1)|浏览(128)
    • 此问题在此处已有答案**:

How to read variables from file, with multiple variables per line?(2个答案)
昨天关门了。
我已经从文件使用shell脚本在subtrack卡住,下面我的数据。这个文件名是年龄

1673495825 1673420702 01/11/23_14:05:02 
1673495825 1673420702 01/11/23_14:05:02

我的期望是collum 1将subtrack与collum 2在这里我的代码

for i in "$(cat age)"
        
       do
            
          timestamp="$(echo "$i" | sed 's/ .*//' | awk '$1=$1')"
            
          firstoccure="$(echo "$i" | awk '{print $2}' | awk '$1=$1')"
            
          aging="$((timestamp - firstoccure))"
            
          if [ $aging -gt 43200 -o $aging -lt 86400 ]
            
          then
               
              echo "12 Hours"
            
         elif [ $aging -gt 86400 ]
            
         then
                
             echo "24 Hours"
            
        fi

done

whit上面的脚本我有一个错误,像这样

***1673495776: syntax error in expression (error token is "1673495776")***

如果我的列表只有一个,这个脚本将是成功的。
我需要你的帮助
谢谢
希望我能解决这个问题

8ulbf1ek

8ulbf1ek1#

for i in "$(cat age)"只迭代一次,i等于age文件的全部内容。可能不是您想要的。
下面的代码执行awk的所有操作:

awk '{
  a=$1-$2;
  if(a>43200 && a<86400)
    print "12 Hours";
  else if(a>86400)
    print "24 Hours"
}' age

如果您确实喜欢使用bash,可以尝试:

while read -r timestamp firstoccure dummy; do
  ((aging=timestamp-firstoccure))
  if ((aging>43200)) && ((aging<86400)); then
    echo "12 Hours"
  elif ((aging>86400)); then
    echo "24 Hours"
  fi
done < age

注意:如果aging=86400,则不打印任何不等式。

相关问题