이름이 포함된 txt 파일이 있습니다.출력.txt:
output.txt
2128,4.4
2128,5.5
첫 번째 행의 쉼표 앞의 첫 번째 숫자가 두 번째 행의 첫 번째 숫자와 같고 두 번째 행의 쉼표 뒤의 두 번째 숫자를 반환하는 비교 스크립트를 갖고 싶습니다.
output:
5.5
만약에출력.txt첫 번째 행의 첫 번째 숫자와 두 번째 행의 첫 번째 숫자는 서로 다른 숫자를 갖습니다. 예를 들면 다음과 같습니다.
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
확인된 주소 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
역할을 하며 ,
각 행의 두 번째 열의 두 번째 값을 인쇄하고 비교합니다.
- 값이 동일하면 두 번째 행의 두 번째 열을 인쇄합니다.5.5
- 값이 같지 않으면 "값이 다릅니다"를 인쇄합니다.
지정한 값을 가진 두 개의 파일을 사용하여 이를 테스트했습니다. 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는 라인별로 작동합니다. 이를 재정의하고 검사를 위해 패턴 공간에 다음 줄을 채울 수 있습니다.
패턴 공간에서 두 행의 첫 번째 필드가 동일한지 확인한 후 대체를 수행하고 출구로 향합니다. OTW, 전체 패턴 공간을 필수 메시지로 철저하게 확인한 다음 sed가 이를 기본 작업으로 인쇄합니다.
sed -e '
N
s/^\([^,]*\),.*\n\1,\(.*\)/\2/;t
s/.*/The Value is Different/
' file.csv