행당 약 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