名前を含むtxtファイルがあります。出力.txt:
output.txt
2128,4.4
2128,5.5
最初の行のコンマの前の最初の数字が2番目の行の最初の数字と同じで、2番目の行のコンマの後の2番目の数字を返す比較スクリプトがあります。
output:
5.5
もし出力.txt最初の行の最初の数字と2番目の行の最初の数字は異なる数字を持ちます。たとえば、次のようになります。
output.txt
2622,56
1011,65
これにより、期待される出力が文字列として返されます。価値が異なります
答え1
AWKスクリプトを使用してこれを処理できます。
#!/usr/bin/awk -f
BEGIN { FS = "," }
NR == 1 { value = $1 }
NR == 2 {
if ($1 == value) print $2
else print "The value is different"
exit
}
これは、最初の行の最初の値を保存し、それを2番目の行の最初の値と比較し、等しい場合は2番目の値を印刷し、それ以外の場合は「値が異なります」を印刷します。その後、より多くの行を読むのに時間を無駄にしないように明示的に終了します。
答え2
確認済みの住所bash
:
#!/bin/bash
file=/path/to/output.txt
if [[ $(awk -F , 'NR==1 {print $1}' $file) -eq $(awk -F , 'NR==2 {print $1}' $file) ]]; then
awk -F , 'NR==2 {print $2}' $file
else
echo "The value is different"
fi
– 変数はfile
output.txt が配置されているパスに割り当てられます。
-if
ステートメントで区切り文字としてawk
機能し、,
各行の2番目の列の2番目の値を印刷して比較します。
- 値が等しい場合は、2行目の2列目を印刷します。5.5
- 値が等しくない場合は、「値が異なります」を印刷します。
指定した値を持つ2つのファイルを使用してこれをテストしました。file
他の人と連携するために、スクリプトの変数値を変更できます。
答え3
sedとawkコマンドを使ってみました。
#!/bin/bash
i=`sed -n '1p' l.txt| awk -F "," '{print $1}'`
j=`sed -n '2p' l.txt| awk -F "," '{print $1}'`
if [[ $i == $j ]]
then
awk -F "," 'NR==2{print $2}' l.txt
else
echo "The value is different"
fi
出力
5.5
答え4
通常、sedは行ごとに機能します。これをオーバーライドし、検査のためにパターン空間に次の行を埋めることができます。
パターン空間内の2行の最初のフィールドが同じであることを確認した後、置換を実行して出口に向かいます。 OTW、パターン領域全体を必須メッセージとして徹底的に確認し、sedはそれをデフォルトのジョブとして印刷します。
sed -e '
N
s/^\([^,]*\),.*\n\1,\(.*\)/\2/;t
s/.*/The Value is Different/
' file.csv