행을 추가하고 열을 선택해야 합니다. 나는 사용하고 싶다
문서
1 2 3
1 2
1
매개변수가 없으면 스크립트는 다음을 반환해야 합니다.
6 (1st row)
3 (2nd row)
1 (3rd row)
이 부분을 위해 제가 만든 코드는 다음과 같습니다.
awk '{ for(i=1; i<=NF;i++) sum+=$i; print(sum); sum=0 }' $FILE
매개변수 1과 2(열 수)를 사용하면 스크립트는 열 1과 2의 모든 행을 추가해야 하므로 다음을 반환해야 합니다.
3 (1st+2nd column)
3 (1st+2nd column)
1 (1st+2nd (blank) column))
내가 필요한 유일한 것은 특정 행만 합산하는 조건입니다.
답변1
변수를 전달할 수 awk
있으며 명령은 다음과 같습니다.
awk -v col1=1 -v col2=2 '{ for(i=1; i<=NF;i++) {if (i == $col1 || i == $col2 ) sum+=$i}; print(sum); sum=0 }' $FILE
-v
var=value
프로그램 변수 var에 값을 할당합니다.
원하는 만큼 열을 추가할 수 있습니다. 추가한 -v colx=value
다음 조건에 추가하세요.|| i == $colx
열 번호를 쉘 스크립트에 전달하려면 이를 배열에 추가한 columnsArray
다음 변수를 생성하면 columns=$(echo "${columnsArray[@]}")
명령이 다음과 같아야 합니다.
awk -v outCols="$columns" 'BEGIN{split(outCols, cols, " ")} { for(i=1; i<=NF;i++) {if (i in cols ) sum+=$i}; print(sum); sum=0 }' $FILE
예를 들어
#!/bin/bash
columns=$(echo "$@")
awk -vcolss="$columns" 'BEGIN{split(colss, cols, " ")}{ for(i=1; i<=NF;i++) {if (i in cols ) sum+=$i}; print(sum); sum=0 }' test
다음을 반환합니다:
3
3
1
답변2
좋아, 내가 얻고 싶은 대답은 다음과 같다.
#!/bin/bash
PLIK=$1
shift
d=${@}
awk -v c="$d" 'BEGIN {split(c,a," ")}{c=0; for(i in a) c+=$a[i]; print c}' $FILE
./script.sh file.txt 1 2
돌아올 것이다 3 3 1
그리고 ./file.sh file.txt 2 3
돌아올 것이다, 5 2 0
그게 맞다