ファイルから2つの値を検索して比較するには? [閉鎖]

ファイルから2つの値を検索して比較するには? [閉鎖]

ファイルの最初の2行から2つの値をどのように検索して比較できますか?次のテキストがあります。

05-24-2016, 2:59:32,0,0
05-24-2016, 2:59:37,0,0
05-24-2016, 2:59:42,0,0
05-24-2016, 2:59:47,0,0
05-24-2016, 2:59:52,0,0
05-24-2016, 2:59:57,0,0
05-24-2016, 3:00:02,0,0

特定の列(2:59:52など)の最初の行の値を比較し、秒単位で違いを確認する必要があります。

次のコマンドを使用していますが、まだ理解していません。

awk '{ print $2 }' <filename>

最初の2行の違いのみが必要です(残りの行は無視する必要があります)。

答え1

このシェルスクリプトは、最初の2行の2番目の列のタイムスタンプ間の違い(秒単位)を取得します。

( IFS=, read -r _ a _; IFS=, read -r _ b _; a=$(date --date $a +%s); b=$(date --date $b +%s); echo "$a - $b" | bc | tr -d - ) <filename

必要に応じて、次のように分割することもできます。

(
    IFS=, read -r junk a junk        # Get second comma separated field
    IFS=, read -r junk b junk
    a=$(date --date $a +%s)          # Convert to seconds since the epoch
    b=$(date --date $b +%s)
    echo "$a - $b" | bc | tr -d -    # Compute signed difference, then discard unary minus sign
) <filename

答え2

最初の2つのタイムスタンプを取得する方法は次のとおりです。

head -2 mydata.csv | awk -F, '{print$2}'

時代を「比較」することはより難しい質問です。どちらが速いかを知りたい場合は、ソートされsortた順序であることを確認するように依頼できます。

if head -2 mydata.csv | awk -F, '{print$2}' | sort -c 2> /dev/null
then
    echo "The first timestamp is earlier than the second"
else
    echo "The first timestamp is later than the second"
fi

実際にタイムスタンプの違いを計算して表示する必要がある場合は、これは別の質問です。あなたは適応できますこの回答(awkの場合)またはお気に入りのスクリプト言語をGoogleで検索してみてください。

答え3

このawkスクリプトは、最初の2行の2番目の列のタイムスタンプ間の違いを秒単位で提供します。

awk -F, '{ cmd = "date --date " $2 " +%s "; cmd | getline sec[NR] } NR>2 { exit } END { print (sec[2] > sec[1]) ? (sec[2] - sec[1]) : (sec[1] - sec[2]) }' <filename

必要に応じて、次のように分割することもできます。

awk -F, '
    # Read a line, get column two and convert it to seconds since the epoch
    { cmd = "date --date " $2 " +%s "; cmd | getline sec[NR] }

    # After two lines start to exit
    NR>2 { exit }

    # At exit print the absolute value of the difference between the two times
    END { print (sec[2] > sec[1]) ? (sec[2] - sec[1]) : (sec[1] - sec[2]) }

' <filename

関連情報