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 24 24 24
答え2
これはかなり秘密のawkです。
awk '{for (i=1; i<=NF; i+=2) {printf "%s ", $(i + (NR > FNR))}; print ""}' file file
ファイルが最初に処理されると、NR > FNR
false(0)になります。
ファイルが2番目に処理されると、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