![awk의 파일에서 const를 빼는 방법은 무엇입니까? [복사]](https://linux55.com/image/99779/awk%EC%9D%98%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20const%EB%A5%BC%20%EB%B9%BC%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
txt 파일의 각 요소에서 1을 빼는 방법. 나는 실제로 다음과 같은 것을 시도했습니다.이것문제가 발생했지만 성공하지 못했습니다.
다음 형식의 파일이 있다고 가정 해 보겠습니다.
2,4,5
1,2,3
14,12,1
이제 내가 원하는 파일은
// basically subtract 1 from all
1,3,4
0,1,2
13,11,0
내가 지금까지 시도한 것은
$awk '{if(getline != 0){
for(i = 0; i <=NF; i++){
$(i)=$(i)-1;
}
} print;}}'
각 요소부터 파일 끝까지, 하위 1까지 읽으려고 하는데 이렇게 하면 -1만 얻습니다.
답변1
논리는 정확하지만 몇 가지 실수를 했습니다.
awk -vOFS=, -F, '{
for(i = 1; i <=NF; i++ ){
$i -= 1;
}
print;
}' file.txt
getline
(사용한 대로) 다음 줄을 읽습니다$0
. 여기서는 의미가 없습니다.awk에게 쉼표로 분할(또는 사용)하도록 지시해야 합니다.
FS
기본적으로 공백으로 분할됩니다.-F
$0
전체 행이므로 루프를 시작하려고 합니다.i = 1
출력에 쉼표를 인쇄하려면
OFS=,
(출력 필드 구분 기호)를 설정해야 합니다.
또는 Perl을 사용할 수도 있습니다.
perl -ple 's{(\d+)}{$1 - 1}eg;' file.txt