中POSIXシェル、いいえPythonそしてではないアッ(だから、「実際の」プログラミング言語を使うべきだと言ってはいけません)ループを繰り返す必要がありますデータセット文書。
https://datacadamia.com/lang/bash/read
私の初期の推測は次のとおりです。
while IFS=";" read -r rec_name rec_version rec_license rec_origin rec_modification rec_newlicense
do
if [ "$name" = "$rec_name" ]; then
# if [ "$version" = "$rec_version" ]; then
if [ "$license" = "$rec_license" ]; then
license="$rec_newlicense"
fi
# fi
fi
done < <(tail -n +2 "${output_file%%.*}.csv")
しかし、最後の行は」POSIX「が声明に合っているので、私は次のことを試しました。
while IFS=";" read -r rec_name rec_version rec_license rec_origin rec_modification rec_newlicense
do
if [ "$name" = "$rec_name" ]; then
# if [ "$version" = "$rec_version" ]; then
if [ "$license" = "$rec_license" ]; then
license="$rec_newlicense"
fi
# fi
fi
done < "${output_file%%.*}.csv"
どういうわけか成功しますが、ヘッダー行も処理されます。
もう一つの問題は現場です。レコードバージョン','レコードソース「そして」履歴を編集'は引用されていません。
どうすれば無視できますか?
私も試したので:
while IFS=";" read -r -a rec
do
if [ "$name" = "${rec[0]}" ]; then
# if [ "$version" = "${rec[1]}" ]; then
if [ "$license" = "${rec[2]}" ]; then
license="${rec[5]}"
fi
# fi
fi
done < "${output_file%%.*}.csv"
しかし、私は次のような結果を得ます:
read: line 93: illegal option -a
それでは、これについてどう思いますか?
挨拶。
答え1
<()
最初の試みではPOSIXではないので、通常のパイプを使用してください。
tail -n +2 "${output_file%%.*}.csv" |
while IFS=";" read -r rec_name rec_version rec_license rec_origin rec_modification rec_newlicense
do
if [ "$name" = "$rec_name" ]; then
if [ "$license" = "$rec_license" ]; then
license="$rec_newlicense"
fi
fi
done
しかし、これは少し複雑なようです。解析中のデータを表示していないのでわかりませんが、次のようにできると思います。
tail -n +2 "${output_file%%.*}.csv" |
while IFS=";" read -r rec_name rec_version rec_license rec_origin rec_modification rec_newlicense
do
if [ "$name" = "$rec_name" ] && [ "$license" = "$rec_license" ]
then
license="$rec_newlicense"
fi
done
未使用の用語を無視する場合、その間の用語についてはそれを行うことはできません。最初のN個の項目を簡単に選択し、残りは無視できます。
while read -r var1 var2 rest; do ... done
これは最初の2つの変数を読み、残りの行をrest
。または、シェルに渡す前に削除してください。
tail -n +2 "${output_file%%.*}.csv" |
cut -d';' -f1,3,6 |
while IFS=";" read -r rec_name rec_license rec_newlicense
do
if [ "$name" = "$rec_name" ] && [ "$license" = "$rec_license" ]
then
license="$rec_newlicense"
fi
done