awk에서 쉘 변수 사용 및 for/while 루프 사용

awk에서 쉘 변수 사용 및 for/while 루프 사용

/ 루프를 awk사용 하여 쉘 변수를 전달하여 다음을 반복하고 달성하려면 어떻게 해야 합니까 ?forwhile

아래와 같은 텍스트 파일이 있습니다.

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(또는 더 이상 사용되지 않음). -10date명령은 읽을 파일 이름을 만드는 데 사용됩니다.

코드 는 각 이름의 발생 횟수를 보유하는 awk연관 배열의 키로 첫 번째 열을 사용합니다 . c파일에서 각 줄을 읽을 때마다 이름 수가 증가합니다. 마지막으로 이름과 관련 개수가 출력됩니다.

여기서는 쉘 변수가 사용되지 않습니다.

관련 정보