我可以像这样将整个文件读入内存:
#!/bin/bash
filename='peptides.txt'
filelines=`cat $filename`
ten_days_ago="$(date)"
for line in $filelines ; do
date_of="$(echo "$line" | jq -r '.time')"
if [[ "$ten_days_ago" > "$date_of" ]]; then
# delete this line
fi
done
问题是:
在这里二进制搜索是合适的-因此bash可能不是一个好的解决方案?我需要找到文件中的行数,除以2,然后转到该行。
答案 0 :(得分:1)
仅在文件排序后才能使用二进制搜索。
您不需要将整个文件读入内存;您可以逐行处理它:
while read line
do
....
done <$filename
而且:是的,我个人不会使用shell脚本来解决这类问题,但这当然是有品味的。
答案 1 :(得分:1)
您没有显示输入文件的外观,而是通过jq判断其JSON数据。
话虽如此,这就是我要怎么做
today=$(date +%j)
tenDaysAgo=$(date --date="10 day ago" +%j)
#This is where you would create the data for peptides.txt
#20 spaces away there is a date stamp so it doesn't distract you
echo "Peptides stuff $today" >> peptides.txt
while read pepStuff; do
if [ $pepStuff == $tenDaysAgo ]; then
sed -i "/.*$pepStuff/d" peptides.txt
fi
done < <(awk '{print $3}' peptides.txt)