awk의 필드 수를 제한하는 방법은 무엇입니까?

awk의 필드 수를 제한하는 방법은 무엇입니까?

아래는 내 테스트 파일입니다.

aa, bb, cc
dd, ee
ff, gg, hh

awk각 레코드에 필드가 2개만 있고 레코드 구분 기호가 첫 번째 필드라고 생각하는 것이 가능합니까 ,? 따라서 내 예에서 $2각 레코드의 값은 다음과 같습니다.

bb, cc
ee
gg, hh

답변1

다음 방법으로 수행되었으며 훌륭하게 작동합니다.

위의 질문에서 나는 $2와 $3만 $2로 간주해야 한다는 것을 이해합니다.

주문하다

awk -F " " '{$2=$2$3;print $1,$2}' filename

답변2

Perl현재 레코드를 분할할 필드 수를 지정하면 됩니다 . 귀하의 경우에는 2입니다.

이 옵션은 쉼표를 구분 기호로 사용하여 현재 레코드를 두 개의 필드로 분할합니다 -F.$_

$ perl -F'/,/,$_,2' -lane '
    print "\$0=<<$_>>";
    print "\$1=<<$F[0]>> \$2=<<$F[1]>>", "\n";
' file.csv

read두 가지 인수를 제공하여 bash의 내장 기능을 효과적으로 사용할 수도 있습니다 .

  while IFS=, read -r f1 f2; do
     # $1 = f1 $2 = f2
  done < file.csv 

답변3

$2예, 그 이후의 모든 필드를 채우면 그렇게 할 수 있습니다 $2.

awk '
  BEGIN{ FS=","; OFS=";" }
  {
    for(i=3; i<=NF; i++) {
      $2 = $2","$i
    }
  }
  { print $1,$2 }
 ' data.txt

다음과 같은 결과를 제공합니다.

aa; bb, cc
dd; ee
ff; gg, hh

관련 정보