ファイルの最初の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