/ 루프를 awk
사용 하여 쉘 변수를 전달하여 다음을 반복하고 달성하려면 어떻게 해야 합니까 ?for
while
아래와 같은 텍스트 파일이 있습니다.
mark 10 20 30
lawrence 40 22 60
mark 11 12 13
mike 15 16 17
lawrence 21 22 23
mike 31 32 33
mike 41 42 47
출력이 다음과 같기를 원합니다. (두 번째 열은 각 이름의 발생 횟수를 나타냅니다.)
요청이 하나 더 있습니다. 다시 물어봐서 죄송합니다. 출력은 다음과 같습니다.
마커의 값이 20(세 번째 열)인 경우 해당 발생은 다음 열에 인쇄되어야 합니다.
mike의 값이 32(세 번째 열)인 경우 해당 항목이 다음 열에 인쇄되어야 합니다.
로렌스의 값이 22(세 번째 열)인 경우 해당 항목이 다음 열에 인쇄되어야 합니다.
마가복음 2장 1절
마이크 3 1
로렌스 2 2
이것이 어떻게 생겼는지입니다. 텍스트 파일을 다음과 같이 전달하고 싶습니다. 도울 수 있니?
지금 사용하고 있는 명령어
n=$(date +"%Y%m%d");
LogDataN=`tail -10 "$n".txt` -- my text file which contains the above data
A=`echo "$LogDataN" | awk '{ c["$1"]++ } END { for (name in c) print name, c[name] }' `
echo "$A"
답변1
awk
여기서 쉘 변수를 전달하려는 이유를 잘 모르겠습니다 .
tail "$(date +'%Y%m%d.txt')" |
awk '{ c[$1]++ } END { for (name in c) print name, c[name] }'
tail
기본적으로 지정된 파일에서 마지막 10줄의 텍스트를 추출하므로 필요하지 않습니다 -n 10
(또는 더 이상 사용되지 않음). -10
이 date
명령은 읽을 파일 이름을 만드는 데 사용됩니다.
코드 는 각 이름의 발생 횟수를 보유하는 awk
연관 배열의 키로 첫 번째 열을 사용합니다 . c
파일에서 각 줄을 읽을 때마다 이름 수가 증가합니다. 마지막으로 이름과 관련 개수가 출력됩니다.
여기서는 쉘 변수가 사용되지 않습니다.