diff options
author | EuAndreh <eu@euandre.org> | 2021-01-24 13:48:16 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2021-01-24 13:48:16 -0300 |
commit | 0cac0038954053c53af34fdcb2f46ebafb37828e (patch) | |
tree | 58e69b1a6493e03a05eae0e5de00373fb4beb04c | |
parent | remembering: Use cut over AWK for selecting field (diff) | |
download | remembering-0cac0038954053c53af34fdcb2f46ebafb37828e.tar.gz remembering-0cac0038954053c53af34fdcb2f46ebafb37828e.tar.xz |
remembering: Append to in-memory string instead of intermediate file
-rwxr-xr-x | remembering | 35 |
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" |