それぞれが 5 つの数値で構成される、数千行のデータ ファイルがあります。例えば:
23 31 56 21 34
34 76 34 75 32
...
...
n% 行をランダムに選択し、最後のエントリを 0 に設定して出力する bash スクリプトを作成したいと考えています。残りのエントリについては、行をそのまま出力したいだけです。行がどの順序で出力されるかは気にしません。
これを行う私の試みは、ファイルをシャッフルし、行の最初の n% を取得awk
し、最後の場所にゼロを付けて印刷することです。次に、残りの行を出力します。これが私の試みです:
#! /bin/bash
number=$2
numlines=$(less $1 | wc -l)
number=$(echo $number'*'$numlines | bc)
number=$(echo $number'/'100 | bc)
shuffledFile=$(less $1 | shuf)
# following line echos the shuffled file, gets the first $number lines, and prints them with a zero in the final column
echo "$shuffledFile" | sed -n --unbuffered "1,/$number/p" | awk '{print $1" "$2-7200" "$3" "$4" 0"}'
echo "$shuffledFile" | sed -n "/${number}/,/${numlines}/p" | awk '{print $1" "$2" "$3" "$4" "$5}'
私の問題は、このスクリプトを実行するたびに異なる行数が出力されることです。ファイルをシャッフルしなければ、すべて期待どおりに機能すると判断しました。前もって感謝します。