[英]splitting folder names with awk in a directory
使用此模板的工作目錄中有一些目錄
cas-2-32
sat-4-64
...
我想遍歷目錄名稱並獲取文件夾名稱的第二部分和第三部分。 我已經寫了這個腳本。 身體顯示出我想做的事。 但是awk命令似乎是錯誤的
#!/bin/bash
for file in `ls`; do
if [ -d $file ]; then
arg2=`awk -F "-" '{print $2}' $file`
echo $arg2
arg3=`awk -F "-" '{print $3}' $file`
echo $arg3
fi
done
但它說
awk: cmd. line:1: fatal: cannot open file `cas-2-32' for reading (Invalid argument)
awk需要一個文件名作為輸入。 由於您說過cas-2-32
等是目錄,因此awk失敗的原因也相同。
使用echo將目錄名稱輸入awk:
#!/bin/bash
for file in `ls`; do
if [ -d $file ]; then
arg2=$(echo $file | awk -F "-" '{print $2}')
echo $arg2
arg3=$(echo $file | awk -F "-" '{print $3}')
echo $arg3
fi
done
簡單命令:ls | awk'{FS =“-”; print $ 2“” $ 3}'如果希望每行中的值只是在awk的打印結果中添加“ \\ n”而不是空格。
當這樣執行時
awk -F "-" '{print $2}' $file
awk
將$file
的值視為要解析的文件,而不是解析$file
的值本身。
最小的解決方法是使用here-string ,該字符串可以將變量的值輸入命令的stdin:
awk -F "-" '{print $2}' <<< $file
順便說一句,如果只需要當前目錄中的文件列表,則不需要ls
,而是使用*
代替,即
for file in *; do
單程:
#!/bin/bash
for file in *; do
if [ -d $file ]; then
tmp="${file#*-}"
arg2="${tmp%-*}"
arg3="${tmp#*-}"
echo "$arg2"
echo "$arg3"
fi
done
另一個:
#!/bin/bash
IFS="-"
for file in *; do
if [ -d $file ]; then
set -- $file
arg2="$2"
arg3="$3"
echo "$arg2"
echo "$arg3"
fi
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.