bashにstdinから1行を読み、ファイルに直接書き込む方法はありますか?それは次のとおりです。
t="$(mktemp)"
while true
do
[read single line from stdin] > "${t}"
[nothing to read] && break
printf '%s\n' "$t"
t="$(mktemp)"
done
使用可能なメモリが制限されているため、行が途方もなく長くなる可能性があります。それ以外の場合は、読み込み中にループを実行します。
編集する:
抽出とフィルタリングを少しする必要があります。より完全な擬似コードの部分は次のとおりです。
f () {
t="$(mktemp)"
while true
do
[read single line from stdin] > "${t}"
[nothing to read] && break
printf '%s\n' "$t"
t="$(mktemp)"
done | while read -r file
do
if cat "$file" | grep -q '[criteria]'
then
cat "$file" | jq '[filter1]'
cat "$file" | jq '[filter2]' >> [seprate file]
[etc]
else
printf '%s\n' "There was a mismatch" > /dev/stderr
fi
rm "$file"
done
}