gsub
모든 문자열에 적용하기 위해 with를 사용해 보았지만 awk
실패했습니다.
gsub(/^ *| *$/,"", $4);
string 에 적용하고 싶지 않고 $4
모든 문자열에 적용하고 싶습니다. 시도했지만 $0
실패했습니다.
뭐가 문제 야?
awk '{
split($12, a, /[/:]/);
if (length(a[2]) == 1) $12=sprintf("%s:%02d/%d", a[1], a[2], a[3]);
gsub(/^ *| *$/,"", $0);
print $9, $12, $10, $2, $3, $4, $5, $6, $7, $8, $13
}' FS='|' OFS=',' file
예
|f_name:x|l_name:x| address:x x | city:x |state:x|zip:x|country:x|ordernumber:x|code:x|downloaded:x| exp:9/2017|ip:x.x.x.x|
산출
ordernumber:x,exp:09/2017,code:x,f_name:x,l_name:x,address:x x,city:x,state:x,zip:x,country:x,ip:x.x.x.x
답변1
필드 (또는 루프 카운터의 이름을 지정하는 데 사용한 모든 항목)를 반복 1
하고 참조합니다. 구문은 C와 유사합니다.NF
$i
for (i = 1 ; i <= NF ; i++) {
...
}
예를 들어
$ echo " foo bar :doh : bla:" |awk -vOFS=: -F: '
{ for (i = 1 ; i <= NF ; i++) gsub(/^ +| +$/, "", $i) } 1'
foo bar:doh:bla:
/^ */
( as 로 변경한 것은 전자를 무시 /^ +/
하는 것 같습니다 .)mawk
^
답변2
각 필드(필드가 문자 "|"로 구분됨)에서 공백을 제거하려는 경우 해당 공백을 포함하도록 필드 구분 기호를 변경하면 됩니다. awk가 필드 구분 기호로 정규 표현식을 지원한다고 가정하면 FS='|'
설정을 다음으로 바꾸십시오.
FS=' *\\| *'
|
문자열은 이제 패턴이므로 이스케이프가 필요합니다 .
첫 번째 필드의 시작 부분과 마지막 필드의 끝 부분에 있는 공백은 처리되지 않습니다. 이것에 sub(/^ */,"",$1)
및 를 사용할 수 있습니다 sub(/ *$/,"",$NF)
.