From 0cac0038954053c53af34fdcb2f46ebafb37828e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jan 2021 13:48:16 -0300 Subject: remembering: Append to in-memory string instead of intermediate file --- remembering | 35 ++++++++++++++++++----------------- 1 file 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" -- cgit v1.2.3