私の入力ファイルの構造上のアクションを実行するには、次のとおりです。バッシュ - 次のようにファイルの内容をループして、行と列
<string1> <string2> <stringN>
hello nice world
one three
は注:、第二列がnullに/タブがあります2番目の列。従って、2行目の2番目の列は空であり、
バッシュではない「3」は、私は、個々の列を処理することができ、各列をループしたいと(文字列[1-N])
私は、各行に反復することができる午前:
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
line=${line/$/'\t'/,}
read -r -a columns <<< "$line"
echo "current Row: $line"
echo "column[1]: '${columns[1]}'"
#echo "column[N] '${columns[N]}'"
done < "${1}"
期待される結果:
current Row: hello,nice,world
column[1]: 'nice'
current Row: one,,three
column[1]: ''
基本的には、入力ファイル(ここでは引数として渡します)を反復処理し、空白がトリムされないようにすべての「クリーニング」を行い、バックスラッシュを無視して最後の行を無視します。 次に、 '\ t'タブをカンマで置き換えて とし、最後に列を配列(列)に読み込んで特定の列を選択できるようにします。
入力ファイルにセパレータ値のタブがあるので、私はcsv形式に変換しようとしましたが、私が使用する正規表現がbashで正しいかどうか、これが値を返さないので間違っています配列。あなたは、ほとんどそこコンマに「\ tを」翻訳の上の少しの修正であり、あなたはコンマこともIFS
を設定する必要が
おかげ