I have a two part problem using awk in bash , first to properly split linefeed delimited text, and second to use the output of awk in the same command line.
For the sake of an example, I would like to list the contents of the second subdirectory within a specific subdirectory.
Assume my directory structure is something like this:
$HOME/meals/dinner
/dinner/appetizer
/dinner/dish
I used the command below which returned text delimited by and ending in 0x0A
$ ls meals/dinner | awk '{split($0,a,"\\\\n"); print a[1]; }'
appetizer
dish
xxd output shows (00000000: 6170 7065 7469 7a65 720a 6469 7368 0a appetizer.dish.)
As a test, I tried this, and it worked.
$ echo "AAA\nBBB" | awk '{split($0,a,"\\\\n"); print a[1]}'
AAA
$ echo "AAA\nBBB" | awk '{split($0,a,"\\\\n"); print a[2]}'
BBB
What is my split doing incorrectly with the output of ls?
Second problem : Even if I extract the delimited directory name, I am not sure how to use it as part of a subsequently executed command on the same command line.
As a simple test, I request an example to ls the extracted directory by name.
Thank you.
Update: I have a workaround, though not exemplary. Here # is the index of a specific subdirectory within an ordered list of subdirectories.
find directory/. -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | head -n # | tail -n 1
However, @EdMorton has pointed out that *nix filenames allow linefeeds. For my purposes, the filenames are generated by a tool and won't have linefeeds but I would be thrilled to have a better solution.
Also, it became clear that my use of echo generated a false positive, and that my assumption that awk was treating \n as an escape sequence was faulty.
A few commentors have asked what I am trying to do. Apologies that my original post was not clear.
I want to get a single-depth list of subdirectory names within a known directory, I want to get the name of the Nth subdirectory based on my script needs, and I want to use that subdirectory name (ideally) in the same command line to process the contents of that subdirectory.
project/assets/70137592/402938/*
<eg all the files of a type> I have been assured the schema and numeric sort order of subdirectories within '70137592' will never change. :shrug: You are splitting by a literal backslash, followed by the letter n
. BTW, your echo
command does not output a newline, as you can verify easily by
echo "AAA\nBBB" | wc -l
which outputs 1
(ie one line).
You could do something like a
ls meals/dinner | head -n 1
to extract the first line.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.