![awk의 필드 수를 제한하는 방법은 무엇입니까?](https://linux55.com/image/153051/awk%EC%9D%98%20%ED%95%84%EB%93%9C%20%EC%88%98%EB%A5%BC%20%EC%A0%9C%ED%95%9C%ED%95%98%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.png)
아래는 내 테스트 파일입니다.
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