AWK를 사용하여 열을 인쇄하시겠습니까? [복사]

AWK를 사용하여 열을 인쇄하시겠습니까? [복사]

행당 약 7개의 열이 있고 두 개의 특정 열을 인쇄한 다음 마지막으로 지정된 열 뒤에 나머지 열을 인쇄하려고 합니다. 예를 들면 다음과 같습니다.

awk -F: {' print $2 ":" $6 '} a.txt

열 2와 6이 인쇄됩니다 a.txt. $6 이후 남은 열을 계속 인쇄하려면 어떻게 해야 합니까?

따라서 입력/출력의 예는 다음과 같습니다.

    column2:column6:column7:column8:column9... 

답변1

당신이 사용할 수있는 cut: echo 1:2:3:4:5:6:7:8:9:10|cut -d: -f 2,6-.

답변2

사용해야 하는 경우 요구 사항을 충족합니다 awk.

$ awk 'BEGIN{FS=":"; OFS=":"}{$1=$3=$4=$5="";gsub("^"FS,"",$0);gsub(FS"+",FS,$0)}1' <your file>
  • 위의 작업은 모든 것을 필드로 분할하여 작동합니다 BEGIN{FS=":"; OFS=":"}.
  • 그런 다음 필드 1, 3, 4, 5를 로 설정하여 지웁니다 "".
  • 이 두 명령은 gsub처음부터 시작될 수 있는 콜론()을 제거하여 작업을 정리합니다. = 두 번째는 :나머지 string 에서 gsub콜론() 시퀀스를 제거합니다 .:$0
  • 마침내 우리는 통과했다 1.

답변3

 perl -F: -pale '$"=":"; $_ = "@F[1,5..$#F]"' input-file.txt

 awk -F: '
    {
       a = $2
       for ( i = 6; i <= NF; ++i )
          $(i-5) = $(i)
       NF -= 5
       print a, $0
    }
 ' OFS=":" input-file.txt

 sed -e '
    s/^/:/;s/:/\n/6
    h;s/.*\n//
    x;s/\n.*//
    s/$/:/
    s/^://;s/:/\n/2
    s/^/:/;s/:/\n/2
    s/.*\n\(.*\)\n.*/\1/
    G;s/\n/:/
  '  input-file.txt

답변4

for루프를 사용하여 시작 인덱스부터 마지막 ​​인덱스까지 계산하고 끝에 인쇄되는 변수를 연결할 수 있습니다.

TEST_STRG="column1:column2:column3:column4:column5:column6:column7:column8:column9"
echo $TEST_STRG | awk 'BEGIN {FS=":"} {out=$2; for(i = 6; i <= NF; i++) out = out""FS""$i } END {print out}'
  • out=$2: 두 번째 열로 변수를 초기화합니다.
  • i <= NF: "NF"는 "필드 수" -> 입력을 분할하여 생성된 열 수입니다.
  • out = out""FS""$i: 현재 인덱스의 컬럼을 필드 구분자 "FS" 뒤의 변수에 연결합니다.

결과는 다음과 같습니다. column2:column6:column7:column8:column9

관련 정보