Question

This is the code I have at the moment - it finds all files that have the file extension .sv and lists them in a zenity radiolist, however, none of the items are selected. Of course, if I change awk '{print "FALSE\n"$0}' to awk '{print "TRUE\n"$0}' they'll all be selected, which I don't want.

test_name=$(
    find ../tests/ -name '*.sv' | 
    awk '{print "FALSE\n"$0}' |
    cut -d "/" -f3 | 
    cut -d "." -f1 |
    zenity  --list \
            --radiolist \
            --title "Select test" \
            --text "Tests..." \
            --column "Box" \
            --column "Files"
) #select test via zenity

How do I make just the first item be selected, and the rest not? I know this can be done by using arrays, as suggested by this question/answer, however it would require significantly more code. Is there a more elegant way of achieving this?

Was it helpful?

Solution

You can amend your awk command to print "TRUE" if it is the first line to be processed. You can also remove your cut commands by using basename:

test_name=$(
    find ../tests/ -name '*.sv' -exec basename {} .sv \; | 
    awk 'NR==1{print "TRUE\n"$0} NR>1{print "FALSE\n"$0}' |
    zenity  --list \
            --radiolist \
            --title "Select test" \
            --text "Tests..." \
            --column "Box" \
            --column "Files"
) #select test via zenity

You could also use sed in place of `awk:

sed -e '1iTRUE' -e '1!iFALSE'
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top