N = 홀수마다 N+1번째 열이 N번째 열의 끝에 배치되도록 파일을 변경하고 싶습니다. 예를 들어, 4개의 열이 있는 파일이 있는 경우 열 2는 열 1의 끝에 붙여넣고 열 4는 열 3의 끝에 붙여넣습니다.
예시 파일:
1 2 3 4
1 2 3 4
1 2 3 4
결과물 파일:
1 3
1 3
1 3
2 4
2 4
2 4
내 파일에는 ~100개의 행과 ~60000개의 열이 있습니다.
답변1
배시 사용:
#!/bin/bash
for c in 0 1; do
while read -r -a columns; do
for((i=$c; i<${#columns[@]}; i+=2)); do
echo -n "${columns[$i]} "
done
echo
done < file
done
산출:
1 3 1 3 1 3 스물넷 스물넷 스물넷
답변2
다음은 꽤 비밀스러운 awk입니다.
awk '{for (i=1; i<=NF; i+=2) {printf "%s ", $(i + (NR > FNR))}; print ""}' file file
파일이 처음 처리되면 NR > FNR
false(0)가 됩니다.
파일이 두 번째로 처리되면 NR > FNR
true, 즉 1이 됩니다.
이를 위해서는 파일을 한 번만 통과해야 하지만 파일의 절반을 메모리에 유지해야 합니다.
awk '
{
for (i=1; i<NF; i+=2) {
printf "%s ", $i
row[NR] = row[NR] $(i+1) " "
}
print ""
}
END {
for (i=1; i<=NR; i++) print row[i]
}
' file