Bash - ファイル、配列、出力

Bash - ファイル、配列、出力

従業員名、部門、従業員が配置されている都市を含むファイルがあります。たとえば、次のようになります。

John
IT
Chicago
Joshua
accounting
New York
Marcy
CEO
Los Angeles
... 

このファイルを次の形式に変換する必要があります。

John?IT?Chicago
Joshua?accounting?New York
Marcy?CEO?Los Angeles

フィールド区切り記号で疑問符を使用する

これまで、私は次のbashスクリプトを完成しました。

fname="mix.txt"
exec<$fname

index=0
while read line ; do
        ARRAYLINES[$index]="$line"
        index=$(($index+1))
done < $fname

NUMBERLINES=$(grep -c "" $fname)
NUMBERLOOP=$(($NUMBERLINES/3))


count=0

for i in $(eval echo {1..$NUMBERLOOP})
do
  one=$(($count+1))
  two=$(($count+2))

  LINE0=${ARRAYLINES[$count]}
  LINE1=${ARRAYLINES[$one]}
  LINE2=${ARRAYLINES[$two]}
  ((count + 3))

  FINAL="$LINE0?$LINE1?$LINE2"
  echo $FINAL >> final.txt
done

最終ファイルの行数は正確ですが、すべての行は最初の従業員データと同じです。

John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago

どんな手がかりがありますか?

ベストアンサー1

普段は「実際にはこれをしなければなりません」という回答を投稿するのが好きではありませんが、誰かがすでに解決済みあなたのスクリプトにバグがあるので止めることはできません。この方法では難しすぎています。sedなどのツールを使用すると、これを簡単に実行できますawk。たとえば、次のようになりますsed

$ sed 'N; N; s/\n/?/g' /path/to/your/file

これは3行(1つの基本、もう2つはN; N;)を読み、改行s/\n/?/gを疑問符()に置き換えます。ファイルの変換されたバージョンが出力されます。コンテンツをその場で置き換えるには、この-iフラグを使用してください。

おすすめ記事