수천 개의 문자열이 두 번째 열에 있으면 하나씩 검색해야 하고, 그렇지 않으면 행의 두 번째 열에 없는 각 문자열에 대해 작업을 수행해야 합니다.
문서:
line a
line b
line c
line z
line d
line e
line z
line z
파일 2:
line a
line b
line c
line d
line e
내가 시도한 것:
$ awk '{if($2=="z") {c++} } END { if(c==0) {print "no \"z\""} else { print c" \"z\"" }}' file
3 "z"
$ awk '{if($2=="z") {c++} } END { if(c==0) {print "no \"z\""} else { print c" \"z\"" }}' file2
no "z"
$ awk '{if($2=="z") {c++} } END { if(c!=0) {print "no \"z, action will be done\""} }' file
no "z, action will be done"
내 코드가 괜찮은가요, 아니면 단순화/최적화할 수 있나요?
업데이트: @RomanPerekhrest는 귀하의 코드를 참조하고 있습니다. "else"만 처리하거나 "c"에 부정을 추가하는 방법은 무엇입니까? 그리고 나머지는 무시하시겠습니까?
나는 노력 중입니다: (c?: "아니요"),
하지만 작동하지 않습니다.
@αГsнιе, 감사합니다. 드디어 작동하는 스크립트가 생겼습니다.
$ awk -v s="z" '$2==s{ c++ }END{ printf (!c ? NOP : "prepare command1\nprepare command2\nprepare command3\n") }' file
prepare command1
prepare command2
prepare command3
$ awk -v s="z" '$2==s{ c++ }END{ printf (!c ? NOP : "prepare command1\nprepare command2\nprepare command3\n") }' file2
$
또는
$ awk -v s="z" '$2==s{ c++ }END{if(c==0) printf "prepare command1\nprepare command2\nprepare command3\n" }' file2
prepare command1
prepare command2
prepare command3
$ awk -v s="z" '$2==s{ c++ }END{if(c==0) printf "prepare command1\nprepare command2\nprepare command3\n" }' file
$
답변1
통과하다awk
동적 변수/매개변수 -v <var>=<value>
:
문자열 테스트 케이스 z
:
awk -v s="z" '$2==s{ c++ }END{ printf "%s \042%s\042\n", (c? c : "no"), s }' file
산출:
3 "z"
문자열 테스트 케이스 w
:
awk -v s="w" '$2==s{ c++ }END{ printf "%s \042%s\042\n", (c? c : "no"), s }' file
산출:
no "w"
답변2
내가 이것을 올바르게 이해했다면 두 번째 열에 특정 알파벳이 있는지 확인하고 싶다면 awk
아래 스크립트를 사용해 보십시오. 이 스크립트는 어떤 것이 있고 해당 개수가 있는지, 어떤 것이 "NOT FOUND!"
메모가 없는지 보고합니다.
awk -v alphabet="$(printf "%s" {a..z})" 'BEGIN{ split(alphabet, arr, "") }
{ chrs[$2]++ } END{ for(y in chrs) for(x in arr)
{ if(arr[x] in chrs) {print y, chrs[y]; delete arr[x]; break }
else{ print arr[x]" NOT FOUND!"; delete arr[x] }
}
}' infile
산출:
w 1
z 3
a 1
b 1
c 1
f NOT FOUND!
g NOT FOUND!
h NOT FOUND!
i NOT FOUND!
j NOT FOUND!
k NOT FOUND!
l NOT FOUND!
m NOT FOUND!
n NOT FOUND!
o NOT FOUND!
p NOT FOUND!
q NOT FOUND!
r NOT FOUND!
s NOT FOUND!
t NOT FOUND!
u NOT FOUND!
v NOT FOUND!
d 1
x NOT FOUND!
y NOT FOUND!
e 1