テーブルの一部の単語をCSV形式のTXTファイルとして印刷しようとしています。
{...some code...}
number_lines=$(awk 'END { print NR }' Table1.txt
if [$number_lines -gt 5]
then
for ((i=5; i<$number_lines; i++))
do
word=$(awk 'FNR==$i {print $2}' Table1.txt)
echo $word
printf "$variable1\t$variable2\t$variable3\t$word\n" >> Table2.csv
done
fi
私はi $ 2行の単語を得ることができると思いましたが、FNR = = 5 {print $ 2}を使用して欲しいものを得ることができましたが、Table1.txtにいくつかの単語があるかどうかわからないので、何かが必要です。 from 行 5 から始まり (前の行は必要ないので) Table1.txt の行 -1 の終わりに移動します。私の貧しいコードが誰かを怒らせないことを願っています。私はこれを緊急にしなければならなかったし、以前はbashで何もしたことがなかったので申し訳ありません。
ベストアンサー1
-v オプションを使用すると、シェル変数を awk 変数として非表示にできます。
awkコマンドは次のとおりです。
awk -v Seq="$i" 'FNR==Seq {print $2}' Table1.txt
その修正が提案されたら、10行すべてを単一のawkプログラムに置き換える方が速く、よりきれいになります。これにより、Table1に含まれるすべての行を読み取る必要がなくなります。 awkは行の計算とデータの読み取りに非常に堪能です。
テストされていませんが、「一部のコード」の後のすべての内容を次のように置き換えます。
awk -v Vars="${variable1}\t${variable2}\t${variable3}\t" \
'FNR >= 5 { printf ("%s\n%s%s\n", $2, Vars, $2); }' \
Table1.txt > Table2.csv