ID와 같이 각 파일의 각 행에 고유한 열을 공유하는 두 개의 CSV 파일이 있습니다. 이 파일에는 제목이 없습니다. file_2에는 다음과 같은 가변 길이 열이 있습니다.
1,2,3
4,5,6,7,8
먼저 sort 명령을 사용하여 정렬하고 해당 열에 대한 조인을 사용하여 공통 열을 기반으로 두 필드를 조인했습니다. 이제 가변 길이 열이 포함된 CSV 파일이 생겼습니다.
다음 순서로 열을 선택하고 싶습니다.
second column, first column, third column, {from 4th column onwards every 3rd column till end of row. e.g., 4,7,10...}
나는 노력했다awk -F "\"*,\"*",\"*" '{print $2 $1 $3}' joinedfile.csv
이 세 개의 열을 얻을 수 있습니다. 하지만 나머지는 어떻게 해야할지 모르겠습니다. 나는 파이썬에서 이것을하는 방법을 알고 있습니다. cut이나 awk와 같은 쉘 명령에서 이 작업을 수행하는 방법을 알고 싶습니다. awk의 while 루프가 도움이 될 것이라고 생각하지만 어떻게 구축해야 할지 모르겠습니다.
답변1
그것은 다음과 같습니다:
awk -F, '{
# print first three columns
printf("%s,%s,%s", $2,$1,$3);
#for all other columns
for ( i = 4; i < NF; i++ )
{
# if column number every third
if ( ( i - 4 ) % 3 == 0) {
printf(",%s", $i);
}
}
#print newline
print "";
}' your_file.csv
답변2
순수 쉘은 열이 26개 미만이면 작동합니다.
while IFS=, read a b c d e f g h i j k l m n o p q r s t u v w x y z
do
printf '%s,' $b $a $c $d $g $j $m $p $s $v $y
printf '\b \b\n'
done < joinedfile.csv
만약 있다면더26개가 넘는 열의 경우 다음을 시도해 보세요.
tr , ' ' < joinedfile.csv |
while read a; do
set -- $a
printf '%s,' $2 $1 $3
while [ "$4" ] ; do
shift 3
printf '%s,' "$1"
done
printf '\b \b\n'
done