ファイルを繰り返してインデックスを使用して単語を抽出するにはどうすればよいですか?

ファイルを繰り返してインデックスを使用して単語を抽出するにはどうすればよいですか?

与えられたファイルは必ずいいえメモリサイズの制限により、変数に保存して繰り返します。

例:

var=$(cat FILE)
for i in $var
do
  echo $i
done

上記の例のようにファイル内のすべての文字列を繰り返しながら、スペースで区切られた各文字列をファイルから直接抽出するにはどうすればよいですか?

例:

fileindex=1
totalfilecount=$(cat FILE | wc -w)
while (( ${fileindex} <= ${totalfilecount} ))
do
  onefilename= ??? missing command using fileindex
  ((fileindex+=1))
done

ファイルを配列として処理し、インデックス位置を使用して単語を抽出するためのコマンドはありますか?

アイデアは、ファイルが配列であるかのようにファイル内の各単語を処理することです。

入力ファイルの例:

one two
three four
five six

以下は、上記の機能が必要なシナリオです。

  • server_Aとserver_Bがあります。
  • server_Aはsftp(sftpのみ)を介してserver_Bに接続し、いくつかのファイルを「インポートする」必要があります。
  • sftpの「ls」または「ls -l」コマンドは、すべてワイルドカードを使用して特定のファイルをフィルタリングできます。
  • 各ファイルはさまざまな理由で個別に処理する必要があります。
  • ファイルをserver_Bにグループにコピーしてから個別に処理することはできません。
  • ファイルリストは最初にserver_Aで作成し、リスト内の各ファイルはserver_Bからコピーして一度に1つずつ処理する必要があります。

何が問題なの?

問題は、リストが長い場合は、lsコマンドが2列の単語リストを生成して常に単一列リストを生成するls -lなどの単純な処理を許可しないことです。

これは私の元の質問につながります。そのような解決策はありますか?

ベストアンサー1

各単語に対してこれを行うことができます。awkこれはメモリ要件を満たす必要があります。

awk -v RS=\  '{
    # Do something with the word
    print
}' file

を使用して希望の文字列を指定できますNR

$ awk -v RS=\  'NR==2{print}' <<< 'foo bar baz'
bar

おすすめ記事