複数のファイルの行を繰り返します。

複数のファイルの行を繰り返します。

ファイル内で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

おすすめ記事