I have setup the docker container to run the model evaluation.
In bash how do I list all files in foo/ but sort the files by the least significant digit of their size so 2820 comes first and then 281771 and finally 2279. I want just the file names e.g., file1 otherfile lastfile.
In bash how do I list all files in foo/ but sort the files by the least significant digit of their size so 2820 comes first and then 281771 and finally 2279. I want just the file names e.g., file1 otherfile lastfile.
One acceptable solution is to loop over the files, compute the file size mod 10, and then sort by that value. For example, you can use: for f in foo/*; do s=$(stat -c %s "$f") echo $(( s % 10 )) "$f" done | sort -n | awk '{print $2}' Here’s what happens step‐by‐step: 1. The for‑loop iterates over every file in the directory foo/. 2. For each file, we get its size (in bytes) with stat (using the format %s). 3. Then we compute s % 10 (i.e. the last digit when seen as a number) and echo that together with the file name. 4. The output is piped to sort, which sorts the lines numerically by the mod value. 5. Finally, awk prints just the filename (the second field) from each line. Thus, if you have files with sizes such that one’s last digit is 0 (e.g. 2820), one’s is 1 (281771) and one’s is 9 (2279), the sorted order will be as you want. Note: This solution assumes you are using GNU stat (with -c) and GNU awk. If you are on a system with BSD stat (e.g. macOS), the commands will be slightly different.
I extracted the following code from that output:
1 2 3 4 5 | #!/bin/bash for f in foo/*; do s=$(stat -c %s "$f") echo $(( s % 10 )) "$f" done | sort -n | awk '{print $2}' |
Running the following program:
1 2 3 4 5 | #!/bin/bash for f in foo/*; do s=$(stat -c %s "$f") echo $(( s % 10 )) "$f" done | sort -n | awk '{print $2}' |
main.sh: line 3: $'\342\200\203\342\200\203s=921': command not found
main.sh: line 4: $'\342\200\203\342\200\203echo': command not found
main.sh: line 3: $'\342\200\203\342\200\203s=714': command not found
main.sh: line 4: $'\342\200\203\342\200\203echo': command not found
main.sh: line 3: $'\342\200\203\342\200\203s=120': command not found
main.sh: line 4: $'\342\200\203\342\200\203echo': command not found
main.sh: line 3: $'\342\200\203\342\200\203s=637': command not found
main.sh: line 4: $'\342\200\203\342\200\203echo': command not found
main.sh: line 3: $'\342\200\203\342\200\203s=366': command not found
main.sh: line 4: $'\342\200\203\342\200\203echo': command not found
main.sh: line 3: $'\342\200\203\342\200\203s=662': command not found
main.sh: line 4: $'\342\200\203\342\200\203echo': command not found
main.sh: line 3: $'\342\200\203\342\200\203s=305': command not found
main.sh: line 4: $'\342\200\203\342\200\203echo': command not found
main.sh: line 3: $'\342\200\203\342\200\203s=403': command not found
main.sh: line 4: $'\342\200\203\342\200\203echo': command not found
main.sh: line 3: $'\342\200\203\342\200\203s=49': command not found
main.sh: line 4: $'\342\200\203\342\200\203echo': command not found
main.sh: line 3: $'\342\200\203\342\200\203s=158': command not found
main.sh: line 4: $'\342\200\203\342\200\203echo': command not found
Resulting in output: main.sh: line 3: $'\342\200\203\342\200\203s=921': command not found main.sh: line 4: $'\342\200\203\342\200\203echo': command not found main.sh: line 3: $'\342\200\203\342\200\203s=714': command not found main.sh: line 4: $'\342\200\203\342\200\203echo': command not found main.sh: line 3: $'\342\200\203\342\200\203s=120': command not found main.sh: line 4: $'\342\200\203\342\200\203echo': command not found main.sh: line 3: $'\342\200\203\342\200\203s=637': command not found main.sh: line 4: $'\342\200\203\342\200\203echo': command not found main.sh: line 3: $'\342\200\203\342\200\203s=366': command not found main.sh: line 4: $'\342\200\203\342\200\203echo': command not found main.sh: line 3: $'\342\200\203\342\200\203s=662': command not found main.sh: line 4: $'\342\200\203\342\200\203echo': command not found main.sh: line 3: $'\342\200\203\342\200\203s=305': command not found main.sh: line 4: $'\342\200\203\342\200\203echo': command not found main.sh: line 3: $'\342\200\203\342\200\203s=403': command not found main.sh: line 4: $'\342\200\203\342\200\203echo': command not found main.sh: line 3: $'\342\200\203\342\200\203s=49': command not found main.sh: line 4: $'\342\200\203\342\200\203echo': command not found main.sh: line 3: $'\342\200\203\342\200\203s=158': command not found main.sh: line 4: $'\342\200\203\342\200\203echo': command not found
Testing if the previous output matches the regex 2.*0.*5.*7.*1.*6.*4.*3.*9.*8: False
I have setup the docker container to run the model evaluation.
In bash how do I list all files in foo/ but sort the files by the least significant digit of their size so 2820 comes first and then 281771 and finally 2279. I want just the file names e.g., file1 otherfile lastfile.
In bash how do I list all files in foo/ but sort the files by the least significant digit of their size so 2820 comes first and then 281771 and finally 2279. I want just the file names e.g., file1 otherfile lastfile.
One acceptable solution was to “decorate” each file with its size’s last digit (i.e. size modulo 10), sort the list numerically on that value, and then extract just the file names. For example, you could use: for f in foo/*; do printf "%d %s\n" $(( $(stat -c%s "$f") % 10 )) "$f" done | sort -n | cut -d' ' -f2- Here’s what happens step‐by‐step: 1. The for‑loop goes over each file in the directory foo/. 2. For each file, stat -c%s gets its size in bytes. 3. $(( … % 10 )) computes the last (least significant) digit of that size. 4. printf prints the last digit followed by the file name. 5. The whole output is piped to sort -n so that the entries are sorted numerically by that digit. 6. Finally, cut -d' ' -f2- removes the leading number so that only the file names remain. This will give you a list of file names sorted according to the least significant digit of their file size.
I extracted the following code from that output:
1 2 3 4 | #!/bin/bash for f in foo/*; do printf "%d %s\n" $(( $(stat -c%s "$f") % 10 )) "$f" done | sort -n | cut -d' ' -f2- |
Running the following program:
1 2 3 4 | #!/bin/bash for f in foo/*; do printf "%d %s\n" $(( $(stat -c%s "$f") % 10 )) "$f" done | sort -n | cut -d' ' -f2- |
main.sh: line 3: $'\342\200\203\342\200\203printf': command not found
main.sh: line 3: $'\342\200\203\342\200\203printf': command not found
main.sh: line 3: $'\342\200\203\342\200\203printf': command not found
main.sh: line 3: $'\342\200\203\342\200\203printf': command not found
main.sh: line 3: $'\342\200\203\342\200\203printf': command not found
main.sh: line 3: $'\342\200\203\342\200\203printf': command not found
main.sh: line 3: $'\342\200\203\342\200\203printf': command not found
main.sh: line 3: $'\342\200\203\342\200\203printf': command not found
main.sh: line 3: $'\342\200\203\342\200\203printf': command not found
main.sh: line 3: $'\342\200\203\342\200\203printf': command not found
Resulting in output: main.sh: line 3: $'\342\200\203\342\200\203printf': command not found main.sh: line 3: $'\342\200\203\342\200\203printf': command not found main.sh: line 3: $'\342\200\203\342\200\203printf': command not found main.sh: line 3: $'\342\200\203\342\200\203printf': command not found main.sh: line 3: $'\342\200\203\342\200\203printf': command not found main.sh: line 3: $'\342\200\203\342\200\203printf': command not found main.sh: line 3: $'\342\200\203\342\200\203printf': command not found main.sh: line 3: $'\342\200\203\342\200\203printf': command not found main.sh: line 3: $'\342\200\203\342\200\203printf': command not found main.sh: line 3: $'\342\200\203\342\200\203printf': command not found
Testing if the previous output matches the regex 2.*0.*5.*7.*1.*6.*4.*3.*9.*8: False