ファイル内で1行ずつ実行し、各文の最後の単語を抽出してから、私が作成した別のスクリプト(中間スクリプトと呼ばれる)を実行し、これらすべてのスクリプトを別々の行に印刷するスクリプトを作成しようとしています。 。
何らかの理由で無限ループに陥った。
function find_id {
next_file="${*:2}"
temp_file="`echo $next_file | cut -d"." -f1`"
if [[ $temp_file != station ]]; then
while read line; do
if [[ -f "${temp_file}.station" ]]; then
train_col=$((${#line[*]}-1))
$train_id=`echo ${line[${train_col}]}`
echo -n "`intermediate $train_id`"
fi
done < ${temp_file}.station
next_file="`echo $next_file | cut -d"." -f2- | cut -d" " -f2-`"
temp_file="`echo $next_file | cut -d"." -f1`"
echo "`find_id $1 $next_file`"
fi
}
file_list= `ls *.station``
echo "`find_id $1 $file_list``" | sort -n | cut -d" " -f2- | uniq
awkやsedは使用できません。
ベストアンサー1
awk
あなたの質問に記載されているように行われている活動によれば、これらすべての項目を置き換えるために1つだけが必要になるようです。
awk '$NF' infile*.txt > outfile.txt
$NF
各行の最後の単語を表します(周囲にスペースがある単語を意味します)awk
。
上記の解決awk
策が存在している間は、配列として行を読み取り、その配列の最後の要素を負のインデックス(bash 4.3以降)として印刷できます。
arrayedline=( $line )
printf "%s\n", "${arrayedline[@]-1}"
以前のバージョンでは、配列長の部分文字列1を使用するbash
インデックスの式を使用でき、配列の最後の要素を取得できました。arrayedline[${#arrayedline[@]-1}]
${#arrayedline[@]}
arrayedline=( $line )
printf "%s\n", "${arrayedline[${#arrayedline[@]}-1]}"
または、次のように使用することもできます。
printf "%s\n", "${arrayedline[@]:(-1)}" #or
printf "%s\n", "${arrayedlne[@]: -1}"
これで、bash
配列のインデックス付けは最初から行われます0
。