답변1
처음 4개의 열이 파일에서 동일하면 다음과 같은 명령을 실행할 수 있습니다.
set -- file*
fields="-f-5,$(seq -s, 10 5 $((5*$#)))"
paste "$@" | cut ${fields%?} >outfile
paste
이렇게 하면 모든 파일에 대해 필드 1-5와 그 이후의 5개 필드마다 추출 됩니다 .
답변2
테스트되지 않음:
awk -F "\t" '
{ key = $1 FS $2 FS $3 FS $4; values[key] = values[key] FS $5 }
END { for (key in values) print key values[key] }
' file ...
제목
각 파일에 대해 파일 이름의 일부를 추출하여 제목으로 사용하려고 합니다. 헤더를 추적하고 이를 각 파일에 추가하기 위해 별도의 문자열을 사용합니다.
awk -F "\t" '
BEGIN { header = "col1" FS "col2" FS "col3" FS "col4" }
{
key = $1 FS $2 FS $3 FS $4
values[key] = values[key] FS $5
}
FNR == 1 {
split(FILENAME, a, /_/)
header = header FS a[2]
}
END {
print header
for (key in values)
print key values[key]
}
' file ...
BEGIN 블록에서 헤더를 초기화합니다. 처음 4개 열에 원하는 제목을 지정하세요.
이 변수는 FNR
현재 파일의 레코드 번호입니다. FNR == 1
파일의 첫 번째 줄에 있을 때 . awk 변수는 FILENAME
현재 처리 중인 파일의 이름을 보유합니다.
종류
GNU awk를 사용한다면 END 블록(인용하다):
END {
print header
# order the array by index, as strings, ascending
PROCINFO["sorted_in"] = "@ind_str_asc"
for (key in values)
print key values[key]
}
GNU awk가 없다면 다음과 같이 할 수 있습니다:
awk '...' | {
read header
echo "$header"
sort
}