aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2021-01-24 13:48:16 -0300
committerEuAndreh <eu@euandre.org>2021-01-24 13:48:16 -0300
commit0cac0038954053c53af34fdcb2f46ebafb37828e (patch)
tree58e69b1a6493e03a05eae0e5de00373fb4beb04c
parentremembering: Use cut over AWK for selecting field (diff)
downloadremembering-0cac0038954053c53af34fdcb2f46ebafb37828e.tar.gz
remembering-0cac0038954053c53af34fdcb2f46ebafb37828e.tar.xz
remembering: Append to in-memory string instead of intermediate file
-rwxr-xr-xremembering35
1 files changed, 18 insertions, 17 deletions
diff --git a/remembering b/remembering
index 5ab7337..c789757 100755
--- a/remembering
+++ b/remembering
@@ -71,46 +71,47 @@ fi
SORTED_STDIN="$(mktemp)"
cat | sort > "$SORTED_STDIN"
-cmp() {
- BEFORE="$(printf '%s\n%s\n' "$1" "$2")"
- AFTER="$(echo "$BEFORE" | sort)"
- if [ "$BEFORE" = "$AFTER" ]; then
- return 0
- else
- return 1
- fi
+MERGED=''
+MERGEDF="$(mktemp)"
+append() {
+ MERGED="$MERGED${MERGED:+
+}$1"
+}
+
+end() {
+ echo "$MERGED" > "$MERGEDF"
+ exit
}
get_left() {
if ! IFS='' read -r LEFT <&3; then
- exit 0
+ end
fi
}
get_right() {
if ! IFS='' read -r RIGHT_RANKED <&4; then
while IFS='' read -r LEFT; do
- echo "0:$LEFT" >> "$MERGED"
+ append "0:$LEFT"
done <&3
- exit 0
+ end
fi
}
-MERGED="$(mktemp)"
(
get_right
get_left
while true; do
RIGHT="$(echo "$RIGHT_RANKED" | cut -d: -f2-)"
if [ "$LEFT" = "$RIGHT" ]; then
- echo "$RIGHT_RANKED" >> "$MERGED"
+ append "$RIGHT_RANKED"
get_right
get_left
continue
fi
- if cmp "$LEFT" "$RIGHT"; then
- echo "0:$LEFT" >> "$MERGED"
+ if [ "$(expr "$LEFT" \< "$RIGHT")" = 1 ]; then
+ append "0:$LEFT"
get_left
continue
else
@@ -120,7 +121,7 @@ MERGED="$(mktemp)"
done
) 3<"$SORTED_STDIN" 4<"$PROFILE"
-CHOICE="$(sort -t: -k1nr,1 -k2,2 < "$MERGED" | \
+CHOICE="$(sort -t: -k1nr,1 -k2,2 < "$MERGEDF" | \
cut -d: -f2- | \
sh -c "$COMMAND")"
@@ -135,7 +136,7 @@ if [ -n "$CHOICE" ]; then
else
echo "$LINE_RANKED" >> "$NEW_PROFILE"
fi
- done < "$MERGED"
+ done < "$MERGEDF"
fi
mv "$NEW_PROFILE" "$PROFILE"