awk를 사용하여 두 가지 작업을 수행하려고합니다. 목록을 세 개의 개별 목록으로 분리하고 각각의 1 또는 2 열을 정규 표현식으로 변환하려고합니다. awk를 파이프에 연결할 때, 즉 내 목록에서 내 항목을 선택한 다음 awk을 사용하여 대체를 수행하면 목록 항목에 1이 추가됩니다.awk에서 운영 명령?
나는 그림을 awk에 파이프하지 말고 대신 awk에 대한 단일 호출에서이 모든 작업을 수행해야한다.
AH??0*,*,ARRAY RESISTIVITY,RESISTIVITY
AHD*,*,MEASURED DEPTH,REFERENCE
AI*,*,ACOUSTIC IMPEDANCE COMPRESSIONAL,GEOPHYSICAL SYNTHETICS
AI_AVG_HOR_SIG,*,ACOUSTIC IMPEDANCE,ACOUSTIC
*,FOO,BAR,BLEH
목록 하나 2.
에서 두 개의 별도의리스트 라인 2 및 3에 대한 것이다 열에서 와일드 카드를 교체 열에 하나의 와일드 카드와 라인 (4)와 같은 라인 것 1 열과 2 열을 대체해야합니다.
마지막으로, 별도의 목록에서 5 행에 대해 비슷한 작업을 수행해야합니다.
이 목록을 가져올 수 있습니다.
4 호선 : awk -F \, '$1!~/([\*\?])/' file.txt
라인 1-3 : awk -F \, '$1~/([\*\?])/' file.txt
5 호선 : awk -F \, '$1~/^\*$/' file.txt
내 잠수정은 * => *합니다.? => [0-9].
awk -F \, 'gsub(/\*/,".*",$2) $1!~/([\*\?])/' OFS=, file.txt
과 같이 gsub를 사용하려고하면 예기치 않은 결과가 나오는 펑키 목록이 다시 나타납니다. 스태킹 작업과 관련하여 awk에 대해 이해할 수없는 근본적인 것이있는 것처럼 느껴집니다.
하프!
액션 블록에 'gsub'를 넣어야합니다. '{gsub (...)} '. 지금 그것은 하나의 패턴입니다. 따라서 작업을 수행 한 다음 awk가 현재 행을 인쇄하도록 지시합니다. '$ 1 ~ .... '패턴이 일치 할 때만 gsub를 원한다면 그 패턴에 대한 액션 블록에 gsub을 넣고 싶을 것이다 (그리고'print'도 추가해야 할 것이다). –
그건 나를 위해 일했습니다. 내가 지금 가지고있는 유일한 문제는 이것이다. awk -F \, '$ 1 ~/[\ * \?]/&& $ 1! ~/^ \ * $ /'{gsub (/\*/,".* ", $ 1); gsub (/ \? /, "[0-9]", $ 1); gsub (/\*/,".*",$ 2); print} OFS =, file.txt' 오류가 발생합니다. 두 정규식 비교를하고 있기 때문에 가능성이 높습니다. 그 문제를 해결하는 방법을 모릅니다. – juanschwartz
awk 스크립트 (작은 따옴표로 묶은 문자열)를 너무 일찍 종료했습니다. 작은 따옴표는'$ 1! ~/^ \ * $ /'다음이 아닌 마지막'; print}'뒤에 있어야합니다. –